From ebefae8ba16605304779618571485b07f91bb2f4 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 18:07:27 +0100 Subject: Disabled Diana Inquis Share key while inside any gui. - hannibal2 --- .../hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt index 0c4e031f9..e466c88a0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt @@ -20,6 +20,7 @@ import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.cleanPlayerName import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.getLorenzVec +import net.minecraft.client.Minecraft import net.minecraft.client.entity.EntityOtherPlayerMP import net.minecraft.network.play.server.S02PacketChat import net.minecraftforge.event.entity.EntityJoinWorldEvent @@ -165,6 +166,7 @@ object InquisitorWaypointShare { @SubscribeEvent fun onKeyClick(event: LorenzKeyPressEvent) { if (!isEnabled()) return + if (Minecraft.getMinecraft().currentScreen != null) return if (event.keyCode == config.keyBindShare) sendInquisitor() } -- cgit From 76a1c7eb680cb31b050fb848a6a070d33df037c3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:21:10 +0100 Subject: Added option to show king talisman helper outside Dwarven Mines. Fixed King Talisman Helper once again. --- .../skyhanni/config/features/MiningConfig.java | 32 +++++++++---- .../skyhanni/features/mining/KingTalismanHelper.kt | 56 ++++++++++++++++++---- 2 files changed, 70 insertions(+), 18 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/MiningConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/MiningConfig.java index 840096cac..5272336df 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/MiningConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/MiningConfig.java @@ -92,19 +92,33 @@ public class MiningConfig { } @Expose - @ConfigOption(name = "Highlight Commission Mobs", desc = "Highlight Mobs that are part of active commissions.") - @ConfigEditorBoolean - @FeatureToggle - public boolean highlightCommissionMobs = false; + @ConfigOption(name = "King Talisman", desc = "") + @Accordion + public KingTalismanConfig kingTalisman = new KingTalismanConfig(); + + public static class KingTalismanConfig { + + @Expose + @ConfigOption(name = "Enabled", desc = "Show kings you have not talked to yet, and when the next missing king will appear.") + @ConfigEditorBoolean + @FeatureToggle + public boolean enabled = false; + + @Expose + @ConfigOption(name = "Outside Mines", desc = "Show the display even while outside the Dwarven Mines.") + @ConfigEditorBoolean + @FeatureToggle + public boolean outsideMines = false; + + @Expose + public Position position = new Position(-400, 220, false, true); + } @Expose - @ConfigOption(name = "King Talisman Helper", desc = "Show kings you have not talked to yet, and when the next missing king will appear.") + @ConfigOption(name = "Highlight Commission Mobs", desc = "Highlight Mobs that are part of active commissions.") @ConfigEditorBoolean @FeatureToggle - public boolean kingTalismanHelper = false; - - @Expose - public Position kingTalismanHelperPos = new Position(-400, 220, false, true); + public boolean highlightCommissionMobs = false; @Expose @ConfigOption(name = "Names in Core", desc = "Show the names of the 4 areas while in the center of the Crystal Hollows.") 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() - private var farDisplay = "" + private var farDisplay = "Visit the king to sync up." private var display = emptyList() - 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(LorenzVec(129.6, 196.0, 196.7), 2.0) + .filter { it.name.startsWith("§6§lKing ") }.first() + val foundKing = "§6§lKing (?.*)".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 { + val currentOffset = currentOffset ?: 0 val oneSbDay = 1000 * 60 * 20 val oneCircleTime = oneSbDay * kingCircles.size val kingTime = mutableMapOf() 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") } } -- cgit From af3e264dbeba9ab4b9ba4bae1334fa31232f7d78 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:21:50 +0100 Subject: code cleanup --- .../skyhanni/features/mining/KingTalismanHelper.kt | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'src/main') 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 1404e685f..33d5b174c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt @@ -65,23 +65,14 @@ class KingTalismanHelper { } private fun checkOffset() { - val currentKing = getCurrentKing() - - val king = - EntityUtils.getEntitiesNearby(LorenzVec(129.6, 196.0, 196.7), 2.0) - .filter { it.name.startsWith("§6§lKing ") }.first() + val king = EntityUtils.getEntitiesNearby(LorenzVec(129.6, 196.0, 196.7), 2.0) + .filter { it.name.startsWith("§6§lKing ") }.first() val foundKing = "§6§lKing (?.*)".toPattern().matchMatcher(king.name) { group("name") } ?: return - println(" ") - - val currentId = kingCircles.indexOf(currentKing) - println("currentKing: $currentKing $currentId") - + val currentId = kingCircles.indexOf(getCurrentKing()) val foundId = kingCircles.indexOf(foundKing) - println("currentKing: $foundKing $foundId") - currentOffset = currentId - foundId } -- cgit From ec2d189ede2487a98943339fa7816a0e948e7a90 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:41:55 +0100 Subject: Auto reset on year change, also added /shkingfix support --- .../hannibal2/skyhanni/config/commands/Commands.kt | 5 ++ .../skyhanni/features/mining/KingTalismanHelper.kt | 54 ++++++++++++++-------- 2 files changed, 40 insertions(+), 19 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 1e32ff718..82318656a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -24,6 +24,7 @@ import at.hannibal2.skyhanni.features.garden.farming.FarmingWeightDisplay import at.hannibal2.skyhanni.features.garden.farming.GardenStartLocation import at.hannibal2.skyhanni.features.garden.fortuneguide.CaptureFarmingGear import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI +import at.hannibal2.skyhanni.features.mining.KingTalismanHelper import at.hannibal2.skyhanni.features.minion.MinionFeatures import at.hannibal2.skyhanni.features.misc.CollectionTracker import at.hannibal2.skyhanni.features.misc.LockMouseLook @@ -218,6 +219,10 @@ object Commands { "shrepostatus", "Shows the status of all the mods constants" ) { SkyHanniMod.repo.displayRepoStatus(false) } + registerCommand( + "shkingfix", + "Reseting the local King Talisman Helper offset." + ) { KingTalismanHelper.kingFix() } } private fun developersDebugFeatures() { 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 33d5b174c..e9fc47dca 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt @@ -23,7 +23,23 @@ import java.util.Collections class KingTalismanHelper { private val config get() = SkyHanniMod.feature.mining.kingTalisman - private var currentOffset: Int? = null + + companion object { + private var currentOffset: Int? = null + private var skyblockYear = 0 + + private fun getCurrentOffset(): Int? { + if (SkyBlockTime.now().year != skyblockYear) { + return null + } + return currentOffset + } + + fun kingFix() { + currentOffset = null + LorenzUtils.chat("§e[SkyHanni] Reset internal offset of King Talisman Helper.") + } + } private val kingLocation = LorenzVec(129.6, 196.5, 194.1) private val kingCircles = listOf( @@ -37,7 +53,7 @@ class KingTalismanHelper { ) private var allKingsDisplay = emptyList() - private var farDisplay = "Visit the king to sync up." + private var farDisplay = "" private var display = emptyList() private fun isNearby() = IslandType.DWARVEN_MINES.isInIsland() && LorenzUtils.skyBlockArea == "Royal Palace" && @@ -46,21 +62,22 @@ class KingTalismanHelper { @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!event.isMod(20)) return + if (!isEnabled()) return + val profileSpecific = ProfileStorageData.profileSpecific ?: return - if (!isEnabled()) { - display = emptyList() - return - } val nearby = isNearby() - if (nearby) { - if (currentOffset == null) { - checkOffset() - } + if (nearby && getCurrentOffset() == null) { + checkOffset() } - if (currentOffset == null) return + val kingsTalkedTo = profileSpecific.mining.kingsTalkedTo + if (getCurrentOffset() == null) { + val allKings = kingsTalkedTo.size == kingCircles.size + display = if (allKings) emptyList() else listOf("§cVisit the king to sync up.") + return + } - update() + update(kingsTalkedTo) display = if (nearby) allKingsDisplay else Collections.singletonList(farDisplay) } @@ -74,6 +91,7 @@ class KingTalismanHelper { val currentId = kingCircles.indexOf(getCurrentKing()) val foundId = kingCircles.indexOf(foundKing) currentOffset = currentId - foundId + skyblockYear = SkyBlockTime.now().year } fun isEnabled() = config.enabled && LorenzUtils.inSkyBlock @@ -83,7 +101,7 @@ class KingTalismanHelper { fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (event.inventoryName != "Commissions") return if (!isEnabled()) return - if (currentOffset == null) return + if (getCurrentOffset() == null) return if (!isNearby()) return val profileSpecific = ProfileStorageData.profileSpecific ?: return @@ -92,14 +110,12 @@ class KingTalismanHelper { if (currentKing !in kingsTalkedTo) { LorenzUtils.debug("Found new king!") kingsTalkedTo.add(currentKing) - update() + update(kingsTalkedTo) display = allKingsDisplay } } - private fun update() { - val profileSpecific = ProfileStorageData.profileSpecific ?: return - val kingsTalkedTo = profileSpecific.mining.kingsTalkedTo + private fun update(kingsTalkedTo: MutableList) { if (kingsTalkedTo.size == kingCircles.size) { allKingsDisplay = Collections.singletonList("§eAll Kings found.") farDisplay = "" @@ -147,7 +163,7 @@ class KingTalismanHelper { } private fun getKingTimes(): MutableMap { - val currentOffset = currentOffset ?: 0 + val currentOffset = getCurrentOffset() ?: 0 val oneSbDay = 1000 * 60 * 20 val oneCircleTime = oneSbDay * kingCircles.size val kingTime = mutableMapOf() @@ -169,7 +185,7 @@ class KingTalismanHelper { @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { - if (!config.enabled) return + if (!isEnabled()) return config.position.renderStrings(display, posLabel = "King Talisman Helper") } -- cgit From 2ce84766100584a5aaf516a2cbf0907585aaa07e Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Fri, 3 Nov 2023 06:48:51 +1100 Subject: actually fix mouse locking (#662) Fixed mouse sensitivity stuck after restarting by storing old sensitivity. #662 --- .../java/at/hannibal2/skyhanni/config/Storage.java | 11 ++-- .../skyhanni/features/misc/LockMouseLook.kt | 72 +++++++++++----------- 2 files changed, 43 insertions(+), 40 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 21ed83b00..a63477a07 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -1,16 +1,16 @@ package at.hannibal2.skyhanni.config; import at.hannibal2.skyhanni.data.model.ComposterUpgrade; +import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNode; +import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostData; import at.hannibal2.skyhanni.features.dungeon.DungeonAPI; +import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity; import at.hannibal2.skyhanni.features.garden.CropAccessory; import at.hannibal2.skyhanni.features.garden.CropType; import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops; import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems; import at.hannibal2.skyhanni.features.garden.visitor.VisitorReward; -import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNode; -import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; -import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostData; import at.hannibal2.skyhanni.features.mining.powdertracker.PowderChestReward; import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker; import at.hannibal2.skyhanni.features.misc.visualwords.VisualWord; @@ -31,6 +31,9 @@ public class Storage { @Expose public boolean hasPlayedBefore = false; + @Expose + public Float savedMouseSensitivity = .5f; + @Expose public Map> knownFeatureToggles = new HashMap<>(); @@ -457,4 +460,4 @@ public class Storage { public Map bosses = new HashMap<>(); } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt index 8873c7402..b4ab08459 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt @@ -1,36 +1,36 @@ -package at.hannibal2.skyhanni.features.misc - -import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent -import at.hannibal2.skyhanni.utils.LorenzUtils -import net.minecraft.client.Minecraft -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -object LockMouseLook { - private var lockedMouse = false - private var oldSensitivity = 0F - private val lockedPosition = -1F / 3F - - @SubscribeEvent - fun onWorldChange(event: LorenzWorldChangeEvent) { - if (lockedMouse) toggleLock() - val gameSettings = Minecraft.getMinecraft().gameSettings - if (gameSettings.mouseSensitivity == lockedPosition) { - gameSettings.mouseSensitivity = 0.5f - LorenzUtils.chat("§e[SkyHanni] §bReset your mouse sensitivity to 100%.") - } - } - - fun toggleLock() { - lockedMouse = !lockedMouse - - val gameSettings = Minecraft.getMinecraft().gameSettings - if (lockedMouse) { - oldSensitivity = gameSettings.mouseSensitivity - gameSettings.mouseSensitivity = lockedPosition - LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now locked. Type /shmouselock to unlock your rotation") - } else { - gameSettings.mouseSensitivity = oldSensitivity - LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now unlocked.") - } - } -} +package at.hannibal2.skyhanni.features.misc + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.utils.LorenzUtils +import net.minecraft.client.Minecraft +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object LockMouseLook { + private var lockedMouse = false + private const val lockedPosition = -1F / 3F + + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + if (lockedMouse) toggleLock() + val gameSettings = Minecraft.getMinecraft().gameSettings + if (gameSettings.mouseSensitivity == lockedPosition) { + gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouseSensitivity + LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now unlocked because you left it locked.") + } + } + + fun toggleLock() { + val gameSettings = Minecraft.getMinecraft().gameSettings ?: return + lockedMouse = !lockedMouse + + if (lockedMouse) { + SkyHanniMod.feature.storage.savedMouseSensitivity = gameSettings.mouseSensitivity + gameSettings.mouseSensitivity = lockedPosition + LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now locked. Type /shmouselock to unlock your rotation") + } else { + gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouseSensitivity + LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now unlocked.") + } + } +} -- cgit From 7df75c9469bedda34ffce42273abc96f952f613a Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Thu, 2 Nov 2023 22:20:32 +0100 Subject: Add visitor highlighter/blocker (#653) Added Highlight Visitors in SkyBlock. Block Interacting with Visitors. #653 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 + .../skyhanni/config/features/GardenConfig.java | 35 +++++++ .../visitor/HighlightVisitorsOutsideOfGarden.kt | 101 +++++++++++++++++++++ .../test/command/CopyNearbyEntitiesCommand.kt | 3 +- .../skyhanni/utils/jsonobjects/GardenJson.java | 21 ++++- 5 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 8a0805a77..e91fbb1ae 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -160,6 +160,7 @@ import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorColorNames import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorDropStatistics import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorFeatures import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorTimer +import at.hannibal2.skyhanni.features.garden.visitor.HighlightVisitorsOutsideOfGarden import at.hannibal2.skyhanni.features.garden.visitor.VisitorListener import at.hannibal2.skyhanni.features.inventory.AuctionsHighlighter import at.hannibal2.skyhanni.features.inventory.ChestValue @@ -354,6 +355,7 @@ class SkyHanniMod { loadModule(VisitorListener()) loadModule(OwnInventoryData()) loadModule(ToolTipData()) + loadModule(HighlightVisitorsOutsideOfGarden()) loadModule(GuiEditManager()) loadModule(UpdateManager) loadModule(CropAccessoryData()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java index d550d3f72..a5d9847ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java @@ -331,6 +331,41 @@ public class GardenConfig { defaultKey = Keyboard.KEY_NONE ) public int acceptHotkey = Keyboard.KEY_NONE; + + + @Expose + @ConfigOption( + name = "Highlight Visitors in SkyBlock", + desc = "Highlights Visitors outside of the Garden" + ) + @ConfigEditorBoolean + @FeatureToggle + public boolean highlightVisitors = false; + + + @Expose + @ConfigOption( + name = "Block Interacting with Visitors", + desc = "Blocks you from interacting with / unlocking Visitors to allow for Dedication Cycling" + ) + @ConfigEditorDropdown + public VisitorBlockBehaviour blockInteracting = VisitorBlockBehaviour.ONLY_ON_BINGO; + + public enum VisitorBlockBehaviour { + DONT("Don't"), ALWAYS("Always"), ONLY_ON_BINGO("Only on Bingo"); + + final String str; + + VisitorBlockBehaviour(String str) { + this.str = str; + } + + @Override + public String toString() { + return str; + } + } + } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt new file mode 100644 index 000000000..e0638c2f6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt @@ -0,0 +1,101 @@ +package at.hannibal2.skyhanni.features.garden.visitor + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.features.GardenConfig.VisitorConfig.VisitorBlockBehaviour +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.PacketEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.events.withAlpha +import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper +import at.hannibal2.skyhanni.utils.EntityUtils +import at.hannibal2.skyhanni.utils.EntityUtils.getSkinTexture +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.getLorenzVec +import at.hannibal2.skyhanni.utils.jsonobjects.GardenJson +import at.hannibal2.skyhanni.utils.toLorenzVec +import io.github.moulberry.notenoughupdates.util.SBInfo +import net.minecraft.client.Minecraft +import net.minecraft.entity.Entity +import net.minecraft.entity.EntityLivingBase +import net.minecraft.entity.item.EntityArmorStand +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.network.play.client.C02PacketUseEntity +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class HighlightVisitorsOutsideOfGarden { + var visitorJson = mapOf>() + + val config get() = SkyHanniMod.feature.garden.visitors + + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + visitorJson = event.getConstant( + "Garden", GardenJson::class.java + ).visitors.values.groupBy { + it.mode + } + } + + fun getSkinOrTypeFor(entity: Entity): String { + if (entity is EntityPlayer) { + return entity.getSkinTexture() ?: "no skin" + } + return entity.javaClass.simpleName + } + + fun isVisitor(entity: Entity): Boolean { + val mode = SBInfo.getInstance().getLocation() + val possibleJsons = visitorJson[mode] ?: return false + val skinOrType = getSkinOrTypeFor(entity) + return possibleJsons.any { + ((it.position == null) || it.position!!.distance(entity.position.toLorenzVec()) < 1) + && it.skinOrType?.replace("\\n", "")?.replace("\n", "") == skinOrType + } + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!config.highlightVisitors) return + if (!event.repeatSeconds(1)) return + EntityUtils.getEntities() + .filter { it !is EntityArmorStand && isVisitor(it) } + .forEach { + RenderLivingEntityHelper.setEntityColor( + it, + LorenzColor.DARK_RED.toColor().withAlpha(50) + ) { config.highlightVisitors } + } + } + + val shouldBlock + get() = when (config.blockInteracting) { + VisitorBlockBehaviour.DONT -> false + VisitorBlockBehaviour.ALWAYS -> true + VisitorBlockBehaviour.ONLY_ON_BINGO -> SBInfo.getInstance().bingo + null -> false + } + + @SubscribeEvent + fun onClickEntity(event: PacketEvent.SendEvent) { + if (!shouldBlock) return + val world = Minecraft.getMinecraft().theWorld ?: return + val player = Minecraft.getMinecraft().thePlayer ?: return + if (player.isSneaking) return + val packet = event.packet as? C02PacketUseEntity ?: return + val entity = packet.getEntityFromWorld(world) ?: return + if (isVisitor(entity) + || (entity is EntityArmorStand && EntityUtils.getEntitiesNearby( + entity.getLorenzVec(), + 2.0 + ).any { isVisitor(it) }) + ) { + event.isCanceled = true + LorenzUtils.clickableChat( + "§e[SkyHanniBal] Blocked you from interacting with a visitor. Sneak to bypass or click here to change settings.", + "/sh block interacting with visitors" + ) + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt index b7c4ae4a1..97cd1c4ee 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyEntitiesCommand.kt @@ -45,6 +45,7 @@ object CopyNearbyEntitiesCommand { resultList.add("name: '" + entity.name + "'") resultList.add("displayName: '${displayName.formattedText}'") resultList.add("entityId: ${entity.entityId}") + resultList.add("uuid version: ${entity.uniqueID.version()} ${if(entity.uniqueID.version() != 4) "NPC " else ""}(${entity.uniqueID})") resultList.add("location data:") resultList.add("- vec: $vec") resultList.add("- distance: $distance") @@ -167,4 +168,4 @@ object CopyNearbyEntitiesCommand { resultList.add("- type: $type") } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java index 87a80d391..265e5b11e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java @@ -1,7 +1,9 @@ package at.hannibal2.skyhanni.utils.jsonobjects; import at.hannibal2.skyhanni.features.garden.CropType; +import at.hannibal2.skyhanni.utils.LorenzVec; import com.google.gson.annotations.Expose; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; @@ -26,7 +28,24 @@ public class GardenJson { @Expose public String rarity; + @Nullable + @Expose + public LorenzVec position; + + /** + * Formatted as follows: + * - If this visitor is a player, get the encoded skin value + * - If this visitor is a mob, get their mob class name + */ + @Nullable + @Expose + public String skinOrType; + + @Nullable + @Expose + public String mode; + @Expose public List need_items; } -} \ No newline at end of file +} -- cgit From 71adca9654bb933405dce2bde970b0a678a55137 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:21:20 +0100 Subject: code cleanup --- .../visitor/HighlightVisitorsOutsideOfGarden.kt | 41 ++++++++++++---------- 1 file changed, 23 insertions(+), 18 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt index e0638c2f6..99f5910ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt @@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.EntityUtils.getSkinTexture import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.getLorenzVec import at.hannibal2.skyhanni.utils.jsonobjects.GardenJson import at.hannibal2.skyhanni.utils.toLorenzVec @@ -24,11 +25,10 @@ import net.minecraft.network.play.client.C02PacketUseEntity import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class HighlightVisitorsOutsideOfGarden { - var visitorJson = mapOf>() + private var visitorJson = mapOf>() val config get() = SkyHanniMod.feature.garden.visitors - @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { visitorJson = event.getConstant( @@ -36,22 +36,27 @@ class HighlightVisitorsOutsideOfGarden { ).visitors.values.groupBy { it.mode } + for (list in visitorJson.values) { + for (visitor in list) { + visitor.skinOrType = visitor.skinOrType?.replace("\\n", "")?.replace("\n", "") + } + } } - fun getSkinOrTypeFor(entity: Entity): String { + private fun getSkinOrTypeFor(entity: Entity): String { if (entity is EntityPlayer) { return entity.getSkinTexture() ?: "no skin" } return entity.javaClass.simpleName } - fun isVisitor(entity: Entity): Boolean { + private fun isVisitor(entity: Entity): Boolean { val mode = SBInfo.getInstance().getLocation() val possibleJsons = visitorJson[mode] ?: return false val skinOrType = getSkinOrTypeFor(entity) return possibleJsons.any { - ((it.position == null) || it.position!!.distance(entity.position.toLorenzVec()) < 1) - && it.skinOrType?.replace("\\n", "")?.replace("\n", "") == skinOrType + (it.position == null || it.position!!.distance(entity.position.toLorenzVec()) < 1) + && it.skinOrType == skinOrType } } @@ -69,14 +74,17 @@ class HighlightVisitorsOutsideOfGarden { } } - val shouldBlock + private val shouldBlock get() = when (config.blockInteracting) { VisitorBlockBehaviour.DONT -> false VisitorBlockBehaviour.ALWAYS -> true - VisitorBlockBehaviour.ONLY_ON_BINGO -> SBInfo.getInstance().bingo + VisitorBlockBehaviour.ONLY_ON_BINGO -> LorenzUtils.isBingoProfile null -> false } + private fun isVisitorNearby(location: LorenzVec) = + EntityUtils.getEntitiesNearby(location, 2.0).any { isVisitor(it) } + @SubscribeEvent fun onClickEntity(event: PacketEvent.SendEvent) { if (!shouldBlock) return @@ -85,17 +93,14 @@ class HighlightVisitorsOutsideOfGarden { if (player.isSneaking) return val packet = event.packet as? C02PacketUseEntity ?: return val entity = packet.getEntityFromWorld(world) ?: return - if (isVisitor(entity) - || (entity is EntityArmorStand && EntityUtils.getEntitiesNearby( - entity.getLorenzVec(), - 2.0 - ).any { isVisitor(it) }) - ) { + if (isVisitor(entity) || (entity is EntityArmorStand && isVisitorNearby(entity.getLorenzVec()))) { event.isCanceled = true - LorenzUtils.clickableChat( - "§e[SkyHanniBal] Blocked you from interacting with a visitor. Sneak to bypass or click here to change settings.", - "/sh block interacting with visitors" - ) + if (packet.action == C02PacketUseEntity.Action.INTERACT) { + LorenzUtils.clickableChat( + "§e[SkyHanni] Blocked you from interacting with a visitor. Sneak to bypass or click here to change settings.", + "/sh block interacting with visitors" + ) + } } } } -- cgit From 5052aca0aada1d964117542b00220c2f200c6d74 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:21:44 +0100 Subject: Create additional values in the EntityEquipmentChangeEvent for chest, leggings, feet and hand. --- .../java/at/hannibal2/skyhanni/events/EntityEquipmentChangeEvent.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/events/EntityEquipmentChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/EntityEquipmentChangeEvent.kt index 26705ab5e..eecc132ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/EntityEquipmentChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/EntityEquipmentChangeEvent.kt @@ -9,6 +9,10 @@ data class EntityEquipmentChangeEvent( val newItemStack: ItemStack? ) : LorenzEvent() { val isHead get() = equipmentSlot == EQUIPMENT_SLOT_HEAD + val isChest get() = equipmentSlot == EQUIPMENT_SLOT_CHEST + val isLeggings get() = equipmentSlot == EQUIPMENT_SLOT_LEGGINGS + val isFeet get() = equipmentSlot == EQUIPMENT_SLOT_FEET + val isHand get() = equipmentSlot == EQUIPMENT_SLOT_HAND companion object { const val EQUIPMENT_SLOT_HEAD = 4 @@ -17,4 +21,4 @@ data class EntityEquipmentChangeEvent( const val EQUIPMENT_SLOT_FEET = 1 const val EQUIPMENT_SLOT_HAND = 0 } -} \ No newline at end of file +} -- cgit From d3e11684c9efb0635f5199183f9b97ff748c54be Mon Sep 17 00:00:00 2001 From: "Erymanthus[#5074] | (u/)RayDeeUx" <51521765+RayDeeUx@users.noreply.github.com> Date: Thu, 2 Nov 2023 18:29:05 -0400 Subject: 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 --- .../skyhanni/config/features/GUIConfig.java | 22 ++++++++++++++++-- .../skyhanni/features/misc/InGameDateDisplay.kt | 27 ++++++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) (limited to 'src/main') 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 @@ -115,17 +115,35 @@ public class GUIConfig { @Expose public Position position = new Position(10, 10, false, true); + @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 -- cgit From 27f0b207793ddedf406fd56521d0ae0537279661 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 2 Nov 2023 23:30:22 +0100 Subject: code cleanup --- .../skyhanni/config/features/GUIConfig.java | 27 ++++++++++--------- .../skyhanni/features/misc/InGameDateDisplay.kt | 31 +++++++++++++++------- .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 8 +++--- .../at/hannibal2/skyhanni/utils/StringUtils.kt | 4 ++- .../skyhanni/utils/jsonobjects/TabListJson.java | 11 ++++++++ 5 files changed, 54 insertions(+), 27 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/TabListJson.java (limited to 'src/main') 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 177c0b3ce..79df5cdd8 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java @@ -98,15 +98,15 @@ public class GUIConfig { @Expose @ConfigOption(name = "In-Game Date", desc = "") @Accordion - public InGameDateConfig inGameDateConfig = new InGameDateConfig(); + public InGameDateConfig inGameDate = new InGameDateConfig(); public static class InGameDateConfig { @Expose @ConfigOption( - name = "Enabled", - desc = "Show the in-game date of SkyBlock (like in Apec, §ebut with mild delays§7).\n" + - "(Though this one includes the SkyBlock year!)" + name = "Enabled", + desc = "Show the in-game date of SkyBlock (like in Apec, §ebut with mild delays§7).\n" + + "(Though this one includes the SkyBlock year!)" ) @ConfigEditorBoolean @FeatureToggle @@ -117,8 +117,8 @@ 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." + 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 @@ -126,8 +126,8 @@ public class GUIConfig { @Expose @ConfigOption( - name = "Show Sun/Moon", - desc = "Show the sun or moon symbol seen on the scoreboard." + name = "Show Sun/Moon", + desc = "Show the sun or moon symbol seen on the scoreboard." ) @ConfigEditorBoolean @FeatureToggle @@ -135,13 +135,14 @@ public class GUIConfig { @Expose @ConfigOption( - name = "Refresh Rate", - 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." + name = "Refresh Rate", + 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 + minValue = 1, + maxValue = 60, + minStep = 1 ) 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 1874d1143..1b08e7ebd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt @@ -4,23 +4,33 @@ 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.events.RepositoryReloadEvent 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.matches import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeUtils.formatted +import at.hannibal2.skyhanni.utils.jsonobjects.TabListJson 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 val config get() = SkyHanniMod.feature.gui.inGameDate + private val monthAndDatePattern = + ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}(nd|rd|th|st).*".toPattern() private var display = "" + // sun, moon, spooky + private var sunMoonIcons = emptyList() + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + sunMoonIcons = event.getConstant("TabList").sun_moon_symbols + } + @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!isEnabled()) return - if (!LorenzUtils.inSkyBlock) return if (!config.useScoreboard && !event.repeatSeconds(config.refreshSeconds)) return if (config.useScoreboard && !event.repeatSeconds(1)) return @@ -33,16 +43,17 @@ class InGameDateDisplay { 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 ") } ?: "??" + val monthAndDate = list.find { monthAndDatePattern.matches(it) } ?: "??" + 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("࿇", "") + if (!config.includeSunMoon) { + sunMoonIcons.forEach { theBaseString = theBaseString.replace(it, "") } + } } else { theBaseString = date.formatted() if (config.includeSunMoon) { - if ((date.hour >= 6) && (date.hour < 17)) theBaseString = "$theBaseString ☀" - else theBaseString = "$theBaseString ☽" + theBaseString = if ((date.hour >= 6) && (date.hour < 17)) "$theBaseString ☀" + else "$theBaseString ☽" } } display = theBaseString diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 28afe3b4e..751271510 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -139,6 +139,7 @@ object LorenzUtils { } // TODO replace all calls with regex + @Deprecated("Do not use complicated string operations", ReplaceWith("Regex")) fun String.between(start: String, end: String): String = this.split(start, end)[1] // TODO use derpy() on every use case @@ -426,11 +427,12 @@ object LorenzUtils { val tileSign = (this as AccessorGuiEditSign).tileSign return (tileSign.signText[1].unformattedText.removeColor() == "^^^^^^" - && tileSign.signText[2].unformattedText.removeColor() == "Set your" - && tileSign.signText[3].unformattedText.removeColor() == "speed cap!") + && tileSign.signText[2].unformattedText.removeColor() == "Set your" + && tileSign.signText[3].unformattedText.removeColor() == "speed cap!") } - fun inIsland(island: IslandType) = inSkyBlock && (skyBlockIsland == island || island == IslandType.CATACOMBS && inDungeons) + fun inIsland(island: IslandType) = + inSkyBlock && (skyBlockIsland == island || island == IslandType.CATACOMBS && inDungeons) fun IslandType.isInIsland() = inIsland(this) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 66eb0faad..0900b3812 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -235,4 +235,6 @@ object StringUtils { fun String.convertToFormatted(): String { return this.replace("&&", "§") } -} \ No newline at end of file + + fun Pattern.matches(string: String) = matcher(string).matches() +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/TabListJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/TabListJson.java new file mode 100644 index 000000000..03c256256 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/TabListJson.java @@ -0,0 +1,11 @@ +package at.hannibal2.skyhanni.utils.jsonobjects; + +import com.google.gson.annotations.Expose; + +import java.util.List; + +public class TabListJson { + + @Expose + public List sun_moon_symbols; +} -- cgit From c14cfe950c8d0959e7c6b6fed7fd091b0cf826fe Mon Sep 17 00:00:00 2001 From: "Erymanthus[#5074] | (u/)RayDeeUx" <51521765+RayDeeUx@users.noreply.github.com> Date: Thu, 2 Nov 2023 19:04:20 -0400 Subject: Feature: The Great Spook Display Utilities and Notif Sound (#660) Added support for showing the primal fear data from tab list as gui elements and play warning sound when the next primal fear can spawn. #660 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 + .../skyhanni/config/features/EventConfig.java | 42 ++++++++++++++++ .../skyhanni/features/event/spook/TheGreatSpook.kt | 58 ++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/event/spook/TheGreatSpook.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index e91fbb1ae..0ef311323 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -102,6 +102,7 @@ import at.hannibal2.skyhanni.features.event.diana.InquisitorWaypointShare import at.hannibal2.skyhanni.features.event.diana.SoopyGuessBurrow import at.hannibal2.skyhanni.features.event.jerry.HighlightJerries import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureTracker +import at.hannibal2.skyhanni.features.event.spook.TheGreatSpook import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder import at.hannibal2.skyhanni.features.fame.CityProjectFeatures import at.hannibal2.skyhanni.features.fishing.ChumBucketHider @@ -457,6 +458,7 @@ class SkyHanniMod { loadModule(NonGodPotEffectDisplay()) loadModule(SoopyGuessBurrow()) loadModule(HighlightJerries()) + loadModule(TheGreatSpook()) loadModule(GriffinBurrowHelper) loadModule(GriffinBurrowParticleFinder()) loadModule(BurrowWarpHelper()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/EventConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/EventConfig.java index 7b4d0211f..fe7e36440 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/EventConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/EventConfig.java @@ -329,6 +329,48 @@ public class EventConfig { } + @ConfigOption(name = "The Great Spook", desc = "") + @Accordion + @Expose + public GreatSpookConfig spook = new GreatSpookConfig(); + + public static class GreatSpookConfig { + + @Expose + @ConfigOption(name = "Primal Fear Timer", desc = "Shows cooldown timer for next primal fear.") + @ConfigEditorBoolean + @FeatureToggle + public boolean primalFearTimer = false; + + @Expose + @ConfigOption(name = "Primal Fear Notify", desc = "Plays a notification sound when the next primal fear can spawn.") + @ConfigEditorBoolean + @FeatureToggle + public boolean primalFearNotification = false; + + @Expose + public Position positionTimer = new Position(20, 20, false, true); + + @Expose + @ConfigOption(name = "Fear Stat Display", desc = "Shows your current Fear stat value.") + @ConfigEditorBoolean + @FeatureToggle + public boolean fearStatDisplay = false; + + @Expose + public Position positionFear = new Position(30, 30, false, true); + + @Expose + @ConfigOption(name = "IRL Time Left", desc = "Shows the IRL time left before The Great Spook ends.") + @ConfigEditorBoolean + @FeatureToggle + public boolean greatSpookTimeLeft = false; + + @Expose + public Position positionTimeLeft = new Position(40, 40, false, true); + + } + // comment in if the event is needed again // @ConfigOption(name = "300þ Anniversary Celebration", desc = "Features for the 300þ year of SkyBlock") @Accordion diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/spook/TheGreatSpook.kt b/src/main/java/at/hannibal2/skyhanni/features/event/spook/TheGreatSpook.kt new file mode 100644 index 000000000..f0334549e --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/event/spook/TheGreatSpook.kt @@ -0,0 +1,58 @@ +package at.hannibal2.skyhanni.features.event.spook + +import at.hannibal2.skyhanni.SkyHanniMod +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.SoundUtils +import at.hannibal2.skyhanni.utils.TabListData +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class TheGreatSpook { +// §r§cPrimal Fears§r§7: §r§6§lREADY!! + private val config get() = SkyHanniMod.feature.event.spook + private var displayTimer = "" + private var displayFearStat = "" + private var displayTimeLeft = "" + private var notificationSeconds = 0 + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (isAllDisabled()) return + if (!event.repeatSeconds(1)) return + + if (isTimerEnabled() || isNotificationEnabled()) displayTimer = checkTabList(" §r§cPrimal Fears§r§7: ") + if (isFearStatEnabled()) displayFearStat = checkTabList(" §r§5Fear: ") + if (isTimeLeftEnabled()) displayTimeLeft = checkTabList(" §r§dEnds In§r§7: ") + if (isNotificationEnabled()) { + if (displayTimer.endsWith("READY!!")) { + if (notificationSeconds > 0) { + SoundUtils.playBeepSound() + notificationSeconds-- + } + } else if (displayTimer.isNotEmpty()) { + notificationSeconds = 5 + } + } + } + + private fun checkTabList(matchString: String): String { + return (TabListData.getTabList().find { it.contains(matchString) } ?: "").trim() + } + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + if (isTimerEnabled()) config.positionTimer.renderString(displayTimer, posLabel = "Primal Fear Timer") + if (isFearStatEnabled()) config.positionFear.renderString(displayFearStat, posLabel = "Fear Stat Display") + if (isTimeLeftEnabled()) config.positionTimeLeft.renderString(displayTimeLeft, posLabel = "Time Left Display") + } + + private fun isTimerEnabled(): Boolean = LorenzUtils.inSkyBlock && config.primalFearTimer + + private fun isNotificationEnabled(): Boolean = LorenzUtils.inSkyBlock && config.primalFearNotification + private fun isFearStatEnabled(): Boolean = LorenzUtils.inSkyBlock && config.fearStatDisplay + private fun isTimeLeftEnabled(): Boolean = LorenzUtils.inSkyBlock && config.greatSpookTimeLeft + + private fun isAllDisabled(): Boolean = !isTimeLeftEnabled() && !isTimerEnabled() && !isFearStatEnabled() && + !isNotificationEnabled() +} -- cgit From 4b2a3c1c6e08f142df27679f948dfd63eb1a6976 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:09:16 +1100 Subject: fix tool fortune (#674) Fixed tool fortune. #674 --- .../hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 9b57e1fe1..d9161c692 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -21,6 +21,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments @@ -174,9 +175,9 @@ class FarmingFortuneDisplay { } return if (internalName.startsWith("THEORETICAL_HOE")) { listOf(10.0, 25.0, 50.0)[internalName.toString().last().digitToInt() - 1] - } else when (internalName.toString()) { - "FUNGI_CUTTER" -> 30.0 - "COCO_CHOPPER" -> 20.0 + } else when (internalName) { + "FUNGI_CUTTER".asInternalName() -> 30.0 + "COCO_CHOPPER".asInternalName() -> 20.0 else -> 0.0 } } @@ -289,4 +290,4 @@ class FarmingFortuneDisplay { event.move(3,"garden.farmingFortuneDropMultiplier", "garden.farmingFortunes.dropMultiplier") event.move(3,"garden.farmingFortunePos", "garden.farmingFortunes.pos") } -} \ No newline at end of file +} -- cgit From 379b7ee6e42f758284e6871072cd52149ecb7d34 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 00:22:10 +0100 Subject: 0.21 Beta 17 --- CHANGELOG.md | 23 +++++++++++++++++++--- FEATURES.md | 6 ++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e86f8588..ccf1ba1ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,10 @@ + E.g. inside the SkyBlock leveling guide. + Added Chat **Translator** - NetheriteMiner + After enabling, click on any chat message sent by another player to translate it to English. ++ Added Highlight Visitors in SkyBlock. - nea + + Highlights Visitors outside the Garden. ++ Block Interacting with Visitors. - nea + + Blocks you from interacting with / unlocking Visitors to allow for Dedication Cycling. #### Events @@ -82,7 +86,8 @@ + Help with the 2023 Halloween visitor challenge (ephemeral dingsibumsi or something) - nea + New Visitor Ping: Pings you when you are less than 10 seconds away from getting a new visitor. + Accept Hotkey: Accept a visitor when you press this keybind while in the visitor GUI. - ++ Added support for showing the primal fear data from tab list as GUI elements. - Erymanthus ++ Play warning sound when the next Primal Fear can spawn. - thunderblade73 ### Changes @@ -119,9 +124,11 @@ + Only items with recipes are tab completed. + Added option to set the size of highlighted motes orbs in rift and make them smaller by default. - cimbraien + Disabled clicks on SkyHanni GUIs while inside NEU's or Skytils profile viewer. - hannibal2 -+ Removed armor stand checks for Trevor Solver. This fixes or nerfs the feature to not highlight mobs behind blocks sometimes. - hannibal2 ++ Removed armor stand checks for Trevor Solver. This fixes or nerfs the feature to not highlight mobs behind blocks + sometimes. - hannibal2 + Added diamond and gold essence support to PowderTracker. - walker -+ Change the fandom wiki search engine (under the /wiki command) from Google to the fandom wiki's built-in search engine - Erymanthus ++ Change the fandom wiki search engine (under the /wiki command) from Google to the fandom wiki's built-in search + engine - Erymanthus + Added option to hide Chest Value while the Estimated Item Value display is showing. - hannibal2 + No longer merging same items with different prices in Chest Value together. - hannibal2 + Adding Great Spook support for Non God Pot Effect display. - hannibal2 @@ -129,6 +136,8 @@ + Added support for detecting refreshed farming fortune century cake effect. - alexia + Show key to press below burrow warp. - hannibal2 + Makes the Compact Potion message open the Potion effects menu on click. - jani ++ Added option to show King Talisman Helper outside Dwarven Mines. - hannibal2 ++ In-Game Date: Adds support for reading the in-game scoreboard, and also allow sun/moon symbol customization. - Erymanthus ### Bug Fixes @@ -191,6 +200,13 @@ + SkyHanni Keybinds no longer work inside SkyHanni config. - hannibal2 + Fixed Great Spook potion not working in Non God Pot Effect feature. - jani + Fixed wrong Rhys (Deep Caverns NPC) items needed for Dwarven Mines unlock in Bingo Step Helper. - ReyMaratov ++ Fixed King Talisman Helper once again. - hannibal2 ++ Made the ESC -> Mod Options -> SkyHanni -> Config button not crash you. - hannibal2 ++ Disabled Diana Warp key and Inquis Share key while inside any GUI. - hannibal2 ++ Removed Diana warp data on world switch. - hannibal2 ++ Reset mouse sensitivity back to 100% if you log off with lock mouse look enabled. - hannibal2 ++ Fixed mouse sensitivity stuck after restarting by storing old sensitivity. - CalMWolfs ++ Fixed tool fortune. - CalMWolfs #### Config @@ -216,6 +232,7 @@ java config files (names, description, orderings and stuff). + Adding 100 lines to MobFinder.kt and making it better readable in the process. - walker + Making ChatFiler.kt way better, storing regex objects for reuse and preparing future repo support. - walker ++ Added command /shkingfix to reset the internal King Talisman Helper offset. - hannibal2 ## Version 0.20 diff --git a/FEATURES.md b/FEATURES.md index 459ac958a..527f7ed7a 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -480,6 +480,10 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + **Visual garden plot borders** - VixidDev + Press F3 + G to enable/disable the view. + /shmouselock command to lock mouse rotation for farming. - Cad ++ Added Highlight Visitors in SkyBlock. - nea + + Highlights Visitors outside the Garden. ++ Block Interacting with Visitors. - nea + + Blocks you from interacting with / unlocking Visitors to allow for Dedication Cycling.
@@ -582,6 +586,8 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + Help with the 2023 Halloween visitor challenge (ephemeral dingsibumsi or something) - nea + New Visitor Ping: Pings you when you are less than 10 seconds away from getting a new visitor. + Accept Hotkey: Accept a visitor when you press this keybind while in the visitor GUI. ++ Added support for showing the primal fear data from tab list as GUI elements. - Erymanthus ++ Play warning sound when the next Primal Fear can spawn. - thunderblade73
diff --git a/build.gradle.kts b/build.gradle.kts index cc4fdc04b..7e3e98c54 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.16" +version = "0.21.Beta.17" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 0ef311323..ab2915ca8 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -322,7 +322,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.16", + version = "0.21.Beta.17", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 3b2b937b9dc78295a183b3772ea8889c9132280c Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:23:57 +1100 Subject: changed a few .toString to .asString to fix stuff (#678) changed a few .toString to .asString to fix stuff #678 --- .../java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt | 4 ++-- .../hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt | 9 ++++----- .../hannibal2/skyhanni/features/garden/visitor/VisitorReward.kt | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index 973d7ac1e..bfe3cb5bb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -3,5 +3,5 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.utils.InventoryUtils object FishingAPI { - fun hasFishingRodInHand() = InventoryUtils.itemInHandId.toString().contains("ROD") -} \ No newline at end of file + fun hasFishingRodInHand() = InventoryUtils.itemInHandId.asString().contains("ROD") +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index d9161c692..17fc083fa 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -21,7 +21,6 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments @@ -174,10 +173,10 @@ class FarmingFortuneDisplay { return 0.0 } return if (internalName.startsWith("THEORETICAL_HOE")) { - listOf(10.0, 25.0, 50.0)[internalName.toString().last().digitToInt() - 1] - } else when (internalName) { - "FUNGI_CUTTER".asInternalName() -> 30.0 - "COCO_CHOPPER".asInternalName() -> 20.0 + listOf(10.0, 25.0, 50.0)[internalName.asString().last().digitToInt() - 1] + } else when (internalName.asString()) { + "FUNGI_CUTTER" -> 30.0 + "COCO_CHOPPER" -> 20.0 else -> 0.0 } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorReward.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorReward.kt index d21ffebe7..d6aabd3b5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorReward.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorReward.kt @@ -18,9 +18,9 @@ enum class VisitorReward(private val rawInternalName: String) { private val internalName by lazy { rawInternalName.asInternalName() } val itemStack by lazy { internalName.getItemStack() } - val displayName by lazy { itemStack.nameWithEnchantment ?: internalName.toString() } + val displayName by lazy { itemStack.nameWithEnchantment ?: internalName.asString() } companion object { fun getByInternalName(internalName: NEUInternalName) = entries.firstOrNull { it.internalName == internalName } } -} \ No newline at end of file +} -- cgit From 915229c4bd5621ba3e2118f723797fa16846c827 Mon Sep 17 00:00:00 2001 From: HiZe_ Date: Fri, 3 Nov 2023 19:07:00 +0100 Subject: Import VisualWords from SBE (#609) Added support to import SBE Visual Words into SkyHanni. #609 --- .../java/at/hannibal2/skyhanni/config/Storage.java | 3 ++ .../hannibal2/skyhanni/config/commands/Commands.kt | 3 +- .../features/misc/visualwords/VisualWordGui.kt | 60 +++++++++++++++++++++- 3 files changed, 64 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index a63477a07..951e80ebf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -43,6 +43,9 @@ public class Storage { @Expose public List modifiedWords = new ArrayList<>(); + @Expose + public boolean visualWordsImported = false; + @Expose public Boolean contestSendingAsked = false; diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 82318656a..da75c9cc6 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -368,6 +368,7 @@ object Commands { if (!LorenzUtils.onHypixel) { LorenzUtils.chat("§cYou need to join Hypixel to use this feature!") } else { + if (VisualWordGui.sbeConfigPath.exists()) VisualWordGui.drawImport = true SkyHanniMod.screenToOpen = VisualWordGui() } } @@ -388,7 +389,7 @@ object Commands { name: String, description: String, function: (Array) -> Unit, - autoComplete: ((Array) -> List) = { listOf() } + autoComplete: ((Array) -> List) = { listOf() }, ) { val command = SimpleCommand( name, diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 6e9ef14cc..4e845a313 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -1,8 +1,12 @@ package at.hannibal2.skyhanni.features.misc.visualwords import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigManager import at.hannibal2.skyhanni.utils.* +import at.hannibal2.skyhanni.utils.LorenzUtils.chat import at.hannibal2.skyhanni.utils.StringUtils.convertToFormatted +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import com.google.gson.JsonObject import kotlinx.coroutines.launch import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiScreen @@ -12,6 +16,8 @@ import net.minecraft.item.ItemStack import net.minecraft.util.MathHelper import org.lwjgl.input.Keyboard import org.lwjgl.input.Mouse +import java.io.File +import java.io.FileReader import java.io.IOException open class VisualWordGui : GuiScreen() { @@ -44,8 +50,12 @@ open class VisualWordGui : GuiScreen() { private var modifiedWords = mutableListOf() + private val shouldDrawImport get() = drawImport && !SkyHanniMod.feature.storage.visualWordsImported + companion object { fun isInGui() = Minecraft.getMinecraft().currentScreen is VisualWordGui + var sbeConfigPath = File("." + File.separator + "config" + File.separator + "SkyblockExtras.cfg") + var drawImport = false } override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) { @@ -75,6 +85,15 @@ open class VisualWordGui : GuiScreen() { if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) + if (shouldDrawImport){ + val importX = guiLeft + sizeX - 45 + val importY = guiTop + sizeY - 10 + GuiRenderUtils.drawStringCentered("§aImport from SBE", importX, importY) + val importColor = + if (GuiRenderUtils.isPointInRect(mouseX, mouseY, importX - 45, importY - 10, 90, 20)) 0x50828282 else 0x50303030 + drawRect(importX - 45, importY - 10, importX + 45, importY + 10, importColor) + } + GlStateManager.scale(scale, scale, 1f) drawUnmodifiedStringCentered( @@ -346,6 +365,14 @@ open class VisualWordGui : GuiScreen() { } currentlyEditing = !currentlyEditing } + if (shouldDrawImport){ + val importX = guiLeft + sizeX - 45 + val importY = guiTop + sizeY - 10 + if (GuiRenderUtils.isPointInRect(mouseX, mouseY, importX - 45, importY - 10, 90, 20)) { + SoundUtils.playClickSound() + tryImport() + } + } } @Throws(IOException::class) @@ -452,6 +479,37 @@ open class VisualWordGui : GuiScreen() { SkyHanniMod.feature.storage.modifiedWords = modifiedWords } + private fun tryImport() { + if (drawImport) { + val json = ConfigManager.gson.fromJson( + FileReader(sbeConfigPath), + JsonObject::class.java + ) + var importedWords = 0 + var skippedWords = 0 + val lists = json["custom"].asJsonObject["visualWords"].asJsonArray + loop@ for (line in lists) { + "(?.*)@-(?.*)@:-(?false|true)".toPattern().matchMatcher(line.asString) { + val from = group("from") + val to = group("to") + val state = group("state").toBoolean() + + if (modifiedWords.any { it.phrase == from }) { + skippedWords++ + continue@loop + } + + modifiedWords.add(VisualWord(from.replace("&", "&&"), to.replace("&", "&&"), state, false)) + importedWords++ + } + } + if (importedWords > 0 || skippedWords > 0) { + chat("§e[SkyHanni] §aSuccessfully imported §e$importedWords §aand skipped §e$skippedWords §aVisualWords from SkyBlockExtras !") + SkyHanniMod.feature.storage.visualWordsImported = true + drawImport = false + } + } + } private fun drawUnmodifiedString(str: String, x: Float, y: Float) { GuiRenderUtils.drawString("§§$str", x, y) } @@ -479,4 +537,4 @@ private enum class SelectedTextBox { PHRASE, REPLACEMENT, NONE -} \ No newline at end of file +} -- cgit From 27b12a2521bf9f3576814d600589f1e31e0975d8 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 19:08:15 +0100 Subject: fixed check if an existing word already exists with color codes, added support for malformed sbe config and code cleanup. --- .../features/misc/visualwords/VisualWordGui.kt | 29 ++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 4e845a313..97aae1260 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.misc.visualwords import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.* import at.hannibal2.skyhanni.utils.LorenzUtils.chat import at.hannibal2.skyhanni.utils.StringUtils.convertToFormatted @@ -85,7 +86,7 @@ open class VisualWordGui : GuiScreen() { if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) - if (shouldDrawImport){ + if (shouldDrawImport) { val importX = guiLeft + sizeX - 45 val importY = guiTop + sizeY - 10 GuiRenderUtils.drawStringCentered("§aImport from SBE", importX, importY) @@ -365,12 +366,12 @@ open class VisualWordGui : GuiScreen() { } currentlyEditing = !currentlyEditing } - if (shouldDrawImport){ + if (shouldDrawImport) { val importX = guiLeft + sizeX - 45 val importY = guiTop + sizeY - 10 if (GuiRenderUtils.isPointInRect(mouseX, mouseY, importX - 45, importY - 10, 90, 20)) { SoundUtils.playClickSound() - tryImport() + tryImportFromSBE() } } } @@ -479,19 +480,18 @@ open class VisualWordGui : GuiScreen() { SkyHanniMod.feature.storage.modifiedWords = modifiedWords } - private fun tryImport() { - if (drawImport) { - val json = ConfigManager.gson.fromJson( - FileReader(sbeConfigPath), - JsonObject::class.java - ) + private fun tryImportFromSBE() { + if (!drawImport) return + try { + val json = ConfigManager.gson.fromJson(FileReader(sbeConfigPath), JsonObject::class.java) var importedWords = 0 var skippedWords = 0 val lists = json["custom"].asJsonObject["visualWords"].asJsonArray + val pattern = "(?.*)@-(?.*)@:-(?false|true)".toPattern() loop@ for (line in lists) { - "(?.*)@-(?.*)@:-(?false|true)".toPattern().matchMatcher(line.asString) { - val from = group("from") - val to = group("to") + pattern.matchMatcher(line.asString) { + val from = group("from").replace("&", "&&") + val to = group("to").replace("&", "&&") val state = group("state").toBoolean() if (modifiedWords.any { it.phrase == from }) { @@ -499,7 +499,7 @@ open class VisualWordGui : GuiScreen() { continue@loop } - modifiedWords.add(VisualWord(from.replace("&", "&&"), to.replace("&", "&&"), state, false)) + modifiedWords.add(VisualWord(from, to, state, false)) importedWords++ } } @@ -508,8 +508,11 @@ open class VisualWordGui : GuiScreen() { SkyHanniMod.feature.storage.visualWordsImported = true drawImport = false } + } catch (t: Throwable) { + ErrorManager.logError(t, "Failed to load visual words from SBE") } } + private fun drawUnmodifiedString(str: String, x: Float, y: Float) { GuiRenderUtils.drawString("§§$str", x, y) } -- cgit From c65404209dbd59f8444dc34a35012716d68276c6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 19:21:56 +0100 Subject: code cleanup --- .../hannibal2/skyhanni/config/commands/Commands.kt | 6 +-- .../features/misc/visualwords/VisualWordGui.kt | 62 +++++++++++----------- .../at/hannibal2/skyhanni/utils/GuiRenderUtils.kt | 7 ++- 3 files changed, 38 insertions(+), 37 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index da75c9cc6..69e8e5933 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -167,9 +167,9 @@ object Commands { registerCommand( "shcopytranslation", " \n" + - "Requires the Chat > Translator feature to be enabled.\n" + - "Copies the translation for a given message to your clipboard. " + - "Language codes are at the end of the translation when you click on a message." + "Requires the Chat > Translator feature to be enabled.\n" + + "Copies the translation for a given message to your clipboard. " + + "Language codes are at the end of the translation when you click on a message." ) { Translator.fromEnglish(it) } registerCommand( "shmouselock", diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 97aae1260..ef8fb173e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -82,16 +82,14 @@ open class VisualWordGui : GuiScreen() { val y = guiTop + 170 drawUnmodifiedStringCentered("§aAdd New", x, y) - val colour = - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + val colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) if (shouldDrawImport) { val importX = guiLeft + sizeX - 45 val importY = guiTop + sizeY - 10 GuiRenderUtils.drawStringCentered("§aImport from SBE", importX, importY) - val importColor = - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, importX - 45, importY - 10, 90, 20)) 0x50828282 else 0x50303030 + val importColor = if (isPointInMousePos(importX - 45, importY - 10, 90, 20)) 0x50828282 else 0x50303030 drawRect(importX - 45, importY - 10, importX + 45, importY + 10, importColor) } @@ -114,31 +112,31 @@ open class VisualWordGui : GuiScreen() { } var inBox = false - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, adjustedY + 30 * index, sizeX, 30)) inBox = true + if (isPointInMousePos(guiLeft, adjustedY + 30 * index, sizeX, 30)) { + inBox = true + } drawUnmodifiedString("${index + 1}.", (guiLeft + 5) * inverseScale, (adjustedY + 10 + 30 * index) * inverseScale) - if (GuiRenderUtils.isPointInRect(lastClickedWidth, lastClickedHeight, guiLeft + 335, adjustedY + 30 * index + 7, 16, 16)) { + if (isPointInLastClicked(guiLeft + 335, adjustedY + 30 * index + 7, 16, 16)) { lastClickedWidth = 0 lastClickedHeight = 0 phrase.enabled = !phrase.enabled saveChanges() SoundUtils.playClickSound() - } else if (GuiRenderUtils.isPointInRect(lastClickedWidth, lastClickedHeight, guiLeft + 295, - adjustedY + 30 * index + 7, 16, 16) && index != 0) { + } else if (isPointInLastClicked(guiLeft + 295, adjustedY + 30 * index + 7, 16, 16) && index != 0) { lastClickedWidth = 0 lastClickedHeight = 0 SoundUtils.playClickSound() changedIndex = index changedAction = ActionType.UP - } else if (GuiRenderUtils.isPointInRect(lastClickedWidth, lastClickedHeight, guiLeft + 315, - adjustedY + 30 * index + 7, 16, 16) && index != modifiedWords.size - 1) { + } else if (isPointInLastClicked(guiLeft + 315, adjustedY + 30 * index + 7, 16, 16) && index != modifiedWords.size - 1) { lastClickedWidth = 0 lastClickedHeight = 0 SoundUtils.playClickSound() changedIndex = index changedAction = ActionType.DOWN - } else if (GuiRenderUtils.isPointInRect(lastClickedWidth, lastClickedHeight, guiLeft, adjustedY + 30 * index, sizeX, 30)) { + } else if (isPointInLastClicked(guiLeft, adjustedY + 30 * index, sizeX, 30)) { lastClickedWidth = 0 lastClickedHeight = 0 SoundUtils.playClickSound() @@ -192,16 +190,15 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(inverseScale, inverseScale, 1f) scrollScreen() - } - else { + } else { var x = guiLeft + 180 var y = guiTop + 140 drawUnmodifiedStringCentered("§cDelete", x, y) - var colour = if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + var colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) y += 30 drawUnmodifiedStringCentered("§eBack", x, y) - colour = if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) if (currentIndex < modifiedWords.size && currentIndex != -1) { @@ -211,26 +208,26 @@ open class VisualWordGui : GuiScreen() { drawUnmodifiedStringCentered("§bReplacement Enabled", x, y - 20) var status = if (currentPhrase.enabled) "§2Enabled" else "§4Disabled" drawUnmodifiedStringCentered(status, x, y) - colour = if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) x += 200 drawUnmodifiedStringCentered("§bCase Sensitive", x, y - 20) status = if (!currentPhrase.isCaseSensitive()) "§2True" else "§4False" drawUnmodifiedStringCentered(status, x, y) - colour = if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 drawRect(x - 30, y - 10, x + 30, y + 10, colour) drawUnmodifiedString("§bIs replaced by:", guiLeft + 30, guiTop + 75) - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, guiTop + 35, sizeX, 30)) { + if (isPointInMousePos(guiLeft, guiTop + 35, sizeX, 30)) { drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, 0x50303030) } if (currentTextBox == SelectedTextBox.PHRASE) { drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, 0x50828282) } - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, guiTop + 90, sizeX, 30)) { + if (isPointInMousePos(guiLeft, guiTop + 90, sizeX, 30)) { drawRect(guiLeft, guiTop + 90, guiLeft + sizeX, guiTop + 90 + 30, 0x50303030) } if (currentTextBox == SelectedTextBox.REPLACEMENT) { @@ -262,8 +259,7 @@ open class VisualWordGui : GuiScreen() { modifiedWords[changedIndex] = modifiedWords[changedIndex - 1] modifiedWords[changedIndex - 1] = temp } - } - else if (changedAction == ActionType.DOWN) { + } else if (changedAction == ActionType.DOWN) { if (changedIndex < modifiedWords.size - 1) { val temp = modifiedWords[changedIndex] modifiedWords[changedIndex] = modifiedWords[changedIndex + 1] @@ -279,6 +275,12 @@ open class VisualWordGui : GuiScreen() { GlStateManager.popMatrix() } + private fun isPointInMousePos(left: Int, top: Int, width: Int, height: Int) = + GuiRenderUtils.isPointInRect(mouseX, mouseY, left, top, width, height) + + private fun isPointInLastClicked(left: Int, top: Int, width: Int, height: Int) = + GuiRenderUtils.isPointInRect(lastClickedWidth, lastClickedHeight, left, top, width, height) + override fun handleMouseInput() { super.handleMouseInput() @@ -296,7 +298,7 @@ open class VisualWordGui : GuiScreen() { @Throws(IOException::class) fun mouseClickEvent() { if (!currentlyEditing) { - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, guiTop, sizeX, sizeY - 25)) { + if (isPointInMousePos(guiLeft, guiTop, sizeX, sizeY - 25)) { lastClickedWidth = mouseX lastClickedHeight = mouseY } @@ -304,7 +306,7 @@ open class VisualWordGui : GuiScreen() { var x = guiLeft + 180 var y = guiTop + 140 if (currentlyEditing) { - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) { + if (isPointInMousePos(x - 30, y - 10, 60, 20)) { SoundUtils.playClickSound() currentlyEditing = false modifiedWords.removeAt(currentIndex) @@ -315,21 +317,21 @@ open class VisualWordGui : GuiScreen() { if (currentIndex < modifiedWords.size && currentIndex != -1) { x -= 100 y += 30 - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) { + if (isPointInMousePos(x - 30, y - 10, 60, 20)) { SoundUtils.playClickSound() modifiedWords[currentIndex].enabled = !modifiedWords[currentIndex].enabled saveChanges() } x += 200 - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) { + if (isPointInMousePos(x - 30, y - 10, 60, 20)) { SoundUtils.playClickSound() modifiedWords[currentIndex].setCaseSensitive(!modifiedWords[currentIndex].isCaseSensitive()) saveChanges() - } else if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, guiTop + 35, sizeX, 30)) { + } else if (isPointInMousePos(guiLeft, guiTop + 35, sizeX, 30)) { SoundUtils.playClickSound() currentTextBox = SelectedTextBox.PHRASE currentText = modifiedWords[currentIndex].phrase - } else if (GuiRenderUtils.isPointInRect(mouseX, mouseY, guiLeft, guiTop + 90, sizeX, 30)) { + } else if (isPointInMousePos(guiLeft, guiTop + 90, sizeX, 30)) { SoundUtils.playClickSound() currentTextBox = SelectedTextBox.REPLACEMENT currentText = modifiedWords[currentIndex].replacement @@ -343,7 +345,7 @@ open class VisualWordGui : GuiScreen() { } y = guiTop + 170 x = guiLeft + 180 - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, x - 30, y - 10, 60, 20)) { + if (isPointInMousePos(x - 30, y - 10, 60, 20)) { SoundUtils.playClickSound() if (currentlyEditing) { val currentVisualWord = modifiedWords.elementAt(currentIndex) @@ -356,7 +358,7 @@ open class VisualWordGui : GuiScreen() { currentIndex = -1 currentTextBox = SelectedTextBox.NONE } else { - modifiedWords.add(VisualWord("", "", true, false)) + modifiedWords.add(VisualWord("", "", true, caseSensitive = false)) currentTextBox = SelectedTextBox.PHRASE currentText = "" currentIndex = modifiedWords.size - 1 @@ -369,7 +371,7 @@ open class VisualWordGui : GuiScreen() { if (shouldDrawImport) { val importX = guiLeft + sizeX - 45 val importY = guiTop + sizeY - 10 - if (GuiRenderUtils.isPointInRect(mouseX, mouseY, importX - 45, importY - 10, 90, 20)) { + if (isPointInMousePos(importX - 45, importY - 10, 90, 20)) { SoundUtils.playClickSound() tryImportFromSBE() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt index 1269ec005..c485ec20b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt @@ -164,9 +164,8 @@ object GuiRenderUtils { drawTooltip(textLines, mouseX, mouseY, screenHeight, Minecraft.getMinecraft().fontRendererObj) } - fun isPointInRect(x: Int, y: Int, left: Int, top: Int, width: Int, height: Int): Boolean { - return left <= x && x < left + width && top <= y && y < top + height - } + fun isPointInRect(x: Int, y: Int, left: Int, top: Int, width: Int, height: Int) = + left <= x && x < left + width && top <= y && y < top + height fun drawProgressBar(x: Int, y: Int, barWidth: Int, progress: Float) { GuiScreen.drawRect(x, y, x + barWidth, y + 6, 0xFF43464B.toInt()) @@ -285,4 +284,4 @@ object GuiRenderUtils { renderItemStack(item, x, y) GuiScreen.drawRect(x, y, x + 16, y + 16, colour) } -} \ No newline at end of file +} -- cgit From 61c3b8ab7c4e107b3a7ea19339976deb0a011137 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 19:27:00 +0100 Subject: code cleanup --- .../features/misc/visualwords/VisualWordGui.kt | 52 +++++++++++++++------- 1 file changed, 36 insertions(+), 16 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index ef8fb173e..7c4fb0dfc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -57,6 +57,25 @@ open class VisualWordGui : GuiScreen() { fun isInGui() = Minecraft.getMinecraft().currentScreen is VisualWordGui var sbeConfigPath = File("." + File.separator + "config" + File.separator + "SkyblockExtras.cfg") var drawImport = false + + val itemUp by lazy { + ItemUtils.createSkull( + "§§Up", + "7f68dd73-1ff6-4193-b246-820975d6fab1", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzczMzRjZGRmY" + + "WI0NWQ3NWFkMjhlMWE0N2JmOGNmNTAxN2QyZjA5ODJmNjczN2RhMjJkNDk3Mjk1MjUxMDY2MSJ9fX0=" + ) + } + + val itemDown by lazy { + ItemUtils.createSkull( + "§§Down", + "e4ace6de-0629-4719-aea3-3e113314dd3f", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTc3NDIwMz" + + "RmNTlkYjg5MGM4MDA0MTU2YjcyN2M3N2NhNjk1YzQzOTlkOGUwZGE1Y2U5MjI3Y2Y4MzZiYjhlMiJ9fX0=" + ) + } + } override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) { @@ -74,6 +93,8 @@ open class VisualWordGui : GuiScreen() { val scale = 0.75f val inverseScale = 1 / scale + val colorA = 0x50828282 + val colorB = 0x50303030 if (!currentlyEditing) { val adjustedY = guiTop + 30 + pageScroll var toRemove: VisualWord? = null @@ -82,14 +103,14 @@ open class VisualWordGui : GuiScreen() { val y = guiTop + 170 drawUnmodifiedStringCentered("§aAdd New", x, y) - val colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + val colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) colorA else colorB drawRect(x - 30, y - 10, x + 30, y + 10, colour) if (shouldDrawImport) { val importX = guiLeft + sizeX - 45 val importY = guiTop + sizeY - 10 GuiRenderUtils.drawStringCentered("§aImport from SBE", importX, importY) - val importColor = if (isPointInMousePos(importX - 45, importY - 10, 90, 20)) 0x50828282 else 0x50303030 + val importColor = if (isPointInMousePos(importX - 45, importY - 10, 90, 20)) colorA else colorB drawRect(importX - 45, importY - 10, importX + 45, importY + 10, importColor) } @@ -145,7 +166,8 @@ open class VisualWordGui : GuiScreen() { } if (inBox) { - GuiRenderUtils.drawScaledRec(guiLeft, adjustedY + 30 * index, guiLeft + sizeX, adjustedY + 30 * index + 30, 0x50303030, inverseScale) + GuiRenderUtils.drawScaledRec(guiLeft, adjustedY + 30 * index, guiLeft + sizeX, adjustedY + 30 * index + 30, + colorB, inverseScale) } val statusBlock = if (phrase.enabled) { @@ -157,15 +179,13 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(inverseScale, inverseScale, 1f) if (index != 0) { - val skullItem = ItemUtils.createSkull("§§Up", "7f68dd73-1ff6-4193-b246-820975d6fab1", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzczMzRjZGRmYWI0NWQ3NWFkMjhlMWE0N2JmOGNmNTAxN2QyZjA5ODJmNjczN2RhMjJkNDk3Mjk1MjUxMDY2MSJ9fX0=") - GuiRenderUtils.renderItemAndBackground(skullItem, guiLeft + 295, adjustedY + 30 * index + 7, 0x50828282) + GuiRenderUtils.renderItemAndBackground(itemUp, guiLeft + 295, adjustedY + 30 * index + 7, colorA) } if (index != modifiedWords.size - 1) { - val skullItem = ItemUtils.createSkull("§§Down", "e4ace6de-0629-4719-aea3-3e113314dd3f", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTc3NDIwMzRmNTlkYjg5MGM4MDA0MTU2YjcyN2M3N2NhNjk1YzQzOTlkOGUwZGE1Y2U5MjI3Y2Y4MzZiYjhlMiJ9fX0=") - GuiRenderUtils.renderItemAndBackground(skullItem, guiLeft + 315, adjustedY + 30 * index + 7, 0x50828282) + GuiRenderUtils.renderItemAndBackground(itemDown, guiLeft + 315, adjustedY + 30 * index + 7, colorA) } - GuiRenderUtils.renderItemAndBackground(statusBlock, guiLeft + 335, adjustedY + 30 * index + 7, 0x50828282) + GuiRenderUtils.renderItemAndBackground(statusBlock, guiLeft + 335, adjustedY + 30 * index + 7, colorA) GlStateManager.scale(scale, scale, 1f) @@ -194,11 +214,11 @@ open class VisualWordGui : GuiScreen() { var x = guiLeft + 180 var y = guiTop + 140 drawUnmodifiedStringCentered("§cDelete", x, y) - var colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + var colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) colorA else colorB drawRect(x - 30, y - 10, x + 30, y + 10, colour) y += 30 drawUnmodifiedStringCentered("§eBack", x, y) - colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) colorA else colorB drawRect(x - 30, y - 10, x + 30, y + 10, colour) if (currentIndex < modifiedWords.size && currentIndex != -1) { @@ -208,30 +228,30 @@ open class VisualWordGui : GuiScreen() { drawUnmodifiedStringCentered("§bReplacement Enabled", x, y - 20) var status = if (currentPhrase.enabled) "§2Enabled" else "§4Disabled" drawUnmodifiedStringCentered(status, x, y) - colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) colorA else colorB drawRect(x - 30, y - 10, x + 30, y + 10, colour) x += 200 drawUnmodifiedStringCentered("§bCase Sensitive", x, y - 20) status = if (!currentPhrase.isCaseSensitive()) "§2True" else "§4False" drawUnmodifiedStringCentered(status, x, y) - colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) 0x50828282 else 0x50303030 + colour = if (isPointInMousePos(x - 30, y - 10, 60, 20)) colorA else colorB drawRect(x - 30, y - 10, x + 30, y + 10, colour) drawUnmodifiedString("§bIs replaced by:", guiLeft + 30, guiTop + 75) if (isPointInMousePos(guiLeft, guiTop + 35, sizeX, 30)) { - drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, 0x50303030) + drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, colorB) } if (currentTextBox == SelectedTextBox.PHRASE) { - drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, 0x50828282) + drawRect(guiLeft, guiTop + 35, guiLeft + sizeX, guiTop + 35 + 30, colorA) } if (isPointInMousePos(guiLeft, guiTop + 90, sizeX, 30)) { - drawRect(guiLeft, guiTop + 90, guiLeft + sizeX, guiTop + 90 + 30, 0x50303030) + drawRect(guiLeft, guiTop + 90, guiLeft + sizeX, guiTop + 90 + 30, colorB) } if (currentTextBox == SelectedTextBox.REPLACEMENT) { - drawRect(guiLeft, guiTop + 90, guiLeft + sizeX, guiTop + 90 + 30, 0x50828282) + drawRect(guiLeft, guiTop + 90, guiLeft + sizeX, guiTop + 90 + 30, colorA) } GlStateManager.scale(0.75f, 0.75f, 1f) -- cgit From c33d4666232cd21a5585f36120944a8fca05e58e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 19:29:52 +0100 Subject: code cleanup --- .../skyhanni/features/misc/visualwords/VisualWordGui.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 7c4fb0dfc..deafe3cb3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -139,19 +139,20 @@ open class VisualWordGui : GuiScreen() { drawUnmodifiedString("${index + 1}.", (guiLeft + 5) * inverseScale, (adjustedY + 10 + 30 * index) * inverseScale) - if (isPointInLastClicked(guiLeft + 335, adjustedY + 30 * index + 7, 16, 16)) { + val top = adjustedY + 30 * index + 7 + if (isPointInLastClicked(guiLeft + 335, top, 16, 16)) { lastClickedWidth = 0 lastClickedHeight = 0 phrase.enabled = !phrase.enabled saveChanges() SoundUtils.playClickSound() - } else if (isPointInLastClicked(guiLeft + 295, adjustedY + 30 * index + 7, 16, 16) && index != 0) { + } else if (isPointInLastClicked(guiLeft + 295, top, 16, 16) && index != 0) { lastClickedWidth = 0 lastClickedHeight = 0 SoundUtils.playClickSound() changedIndex = index changedAction = ActionType.UP - } else if (isPointInLastClicked(guiLeft + 315, adjustedY + 30 * index + 7, 16, 16) && index != modifiedWords.size - 1) { + } else if (isPointInLastClicked(guiLeft + 315, top, 16, 16) && index != modifiedWords.size - 1) { lastClickedWidth = 0 lastClickedHeight = 0 SoundUtils.playClickSound() @@ -166,8 +167,7 @@ open class VisualWordGui : GuiScreen() { } if (inBox) { - GuiRenderUtils.drawScaledRec(guiLeft, adjustedY + 30 * index, guiLeft + sizeX, adjustedY + 30 * index + 30, - colorB, inverseScale) + GuiRenderUtils.drawScaledRec(guiLeft, adjustedY + 30 * index, guiLeft + sizeX, adjustedY + 30 * index + 30, colorB, inverseScale) } val statusBlock = if (phrase.enabled) { @@ -179,13 +179,13 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(inverseScale, inverseScale, 1f) if (index != 0) { - GuiRenderUtils.renderItemAndBackground(itemUp, guiLeft + 295, adjustedY + 30 * index + 7, colorA) + GuiRenderUtils.renderItemAndBackground(itemUp, guiLeft + 295, top, colorA) } if (index != modifiedWords.size - 1) { - GuiRenderUtils.renderItemAndBackground(itemDown, guiLeft + 315, adjustedY + 30 * index + 7, colorA) + GuiRenderUtils.renderItemAndBackground(itemDown, guiLeft + 315, top, colorA) } - GuiRenderUtils.renderItemAndBackground(statusBlock, guiLeft + 335, adjustedY + 30 * index + 7, colorA) + GuiRenderUtils.renderItemAndBackground(statusBlock, guiLeft + 335, top, colorA) GlStateManager.scale(scale, scale, 1f) -- cgit From ba60af15b9f3ac89209a57b850f5f3a8488ceb56 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 19:32:17 +0100 Subject: code cleanup --- .../skyhanni/config/features/InventoryConfig.java | 94 +++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java index c0906d512..9a5f4759c 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java @@ -36,13 +36,13 @@ public class InventoryConfig { @Expose @ConfigOption( - name = "Opacity", - desc = "How strong should the items be grayed out?" + name = "Opacity", + desc = "How strong should the items be grayed out?" ) @ConfigEditorSlider( - minValue = 0, - maxValue = 255, - minStep = 5 + minValue = 0, + maxValue = 255, + minStep = 5 ) public int opacity = 180; @@ -134,7 +134,7 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Medal Icon", desc = "Adds a symbol that shows what medal you received in this Contest. " + - "§eIf you use a texture pack this may cause conflicting icons.") + "§eIf you use a texture pack this may cause conflicting icons.") @ConfigEditorBoolean @FeatureToggle public boolean medalIcon = true; @@ -180,9 +180,9 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Extra space", desc = "Space between each line of text.") @ConfigEditorSlider( - minValue = 0, - maxValue = 10, - minStep = 1) + minValue = 0, + maxValue = 10, + minStep = 1) public int extraSpace = 1; @Expose @@ -192,11 +192,11 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Item To Show", desc = "Choose how many items are displayed. (Some sacks have too many items to fit\n" + - "in larger GUI scales, like the nether sack.)") + "in larger GUI scales, like the nether sack.)") @ConfigEditorSlider( - minValue = 0, - maxValue = 45, - minStep = 1 + minValue = 0, + maxValue = 45, + minStep = 1 ) public int itemToShow = 15; @@ -212,8 +212,8 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Price Format", desc = "Format of the price displayed.\n" + - "§eFormatted: §7(12k)\n" + - "§eUnformatted: §7(12,421)") + "§eFormatted: §7(12k)\n" + + "§eUnformatted: §7(12,421)") @ConfigEditorDropdown(values = {"Formatted", "Unformatted"}) public int priceFormat = 0; @@ -286,21 +286,21 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Item To Show", desc = "Choose how many items are displayed.\n" + - "All items in the chest are still counted for the total value.") + "All items in the chest are still counted for the total value.") @ConfigEditorSlider( - minValue = 0, - maxValue = 54, - minStep = 1 + minValue = 0, + maxValue = 54, + minStep = 1 ) public int itemToShow = 15; @Expose @ConfigOption(name = "Hide below", desc = "Item item value below configured amount.\n" + - "Items are still counted for the total value.") + "Items are still counted for the total value.") @ConfigEditorSlider( - minValue = 50_000, - maxValue = 10_000_000, - minStep = 50_000 + minValue = 50_000, + maxValue = 10_000_000, + minStep = 50_000 ) public int hideBelow = 100_000; @@ -367,34 +367,34 @@ public class InventoryConfig { @Expose @ConfigOption( - name = "Item Number", - desc = "Showing the item number as a stack size for these items." + name = "Item Number", + desc = "Showing the item number as a stack size for these items." ) @ConfigEditorDraggableList( - exampleText = { - "§bMaster Star Tier", - "§bMaster Skull Tier", - "§bDungeon Head Floor Number", - "§bNew Year Cake", - "§bPet Level", - "§bMinion Tier", - "§bCrimson Armor", - "§7(Removed)", - "§bKuudra Key", - "§bSkill Level", - "§bCollection Level", - "§bRancher's Boots speed", - "§bLarva Hook", - "§bDungeon Potion Level" - } + exampleText = { + "§bMaster Star Tier", + "§bMaster Skull Tier", + "§bDungeon Head Floor Number", + "§bNew Year Cake", + "§bPet Level", + "§bMinion Tier", + "§bCrimson Armor", + "§7(Removed)", + "§bKuudra Key", + "§bSkill Level", + "§bCollection Level", + "§bRancher's Boots speed", + "§bLarva Hook", + "§bDungeon Potion Level" + } ) public List itemNumberAsStackSize = new ArrayList<>(Arrays.asList(3, 9, 11, 12)); @Expose @ConfigOption( - name = "Quick Craft Confirmation", - desc = "Require Ctrl+Click to craft items that aren't often quick crafted " + - "(e.g. armor, weapons, accessories). Sack items can be crafted normally." + name = "Quick Craft Confirmation", + desc = "Require Ctrl+Click to craft items that aren't often quick crafted " + + "(e.g. armor, weapons, accessories). Sack items can be crafted normally." ) @ConfigEditorBoolean @FeatureToggle @@ -414,21 +414,21 @@ public class InventoryConfig { @Expose @ConfigOption(name = "Item Stars", - desc = "Show a compact star count in the item name for all items.") + desc = "Show a compact star count in the item name for all items.") @ConfigEditorBoolean @FeatureToggle public boolean itemStars = false; @Expose @ConfigOption(name = "Missing Tasks", - desc = "Highlight missing tasks in the SkyBlock Level Guide inventory.") + desc = "Highlight missing tasks in the SkyBlock Level Guide inventory.") @ConfigEditorBoolean @FeatureToggle public boolean highlightMissingSkyBlockLevelGuide = true; @Expose @ConfigOption(name = "Highlight Auctions", - desc = "Highlight own items that are sold in green and that are expired in red.") + desc = "Highlight own items that are sold in green and that are expired in red.") @ConfigEditorBoolean @FeatureToggle public boolean highlightAuctions = true; -- cgit From b3426297169836aceee7486bab89035c35c6d126 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Fri, 3 Nov 2023 20:26:08 +0100 Subject: Change: Custom Keybinds for Harp Helper (#612) Add custom keybinds for Harp Helper. #612 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- .../skyhanni/config/features/InventoryConfig.java | 38 ++++++++++++++++++ .../skyhanni/features/inventory/HarpFeatures.kt | 46 +++++++++++++++------- 3 files changed, 70 insertions(+), 16 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index ab2915ca8..544089711 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -591,7 +591,7 @@ class SkyHanniMod { loadModule(GriffinPetWarning()) loadModule(BestiaryData) loadModule(KingTalismanHelper()) - loadModule(HarpFeatures()) + loadModule(HarpFeatures) loadModule(EnderNodeTracker()) loadModule(CompactBestiaryChatMessage()) loadModule(WatchdogHider()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java index 9a5f4759c..50128e85e 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/InventoryConfig.java @@ -8,8 +8,10 @@ import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean; import io.github.moulberry.moulconfig.annotations.ConfigEditorColour; import io.github.moulberry.moulconfig.annotations.ConfigEditorDraggableList; import io.github.moulberry.moulconfig.annotations.ConfigEditorDropdown; +import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind; import io.github.moulberry.moulconfig.annotations.ConfigEditorSlider; import io.github.moulberry.moulconfig.annotations.ConfigOption; +import org.lwjgl.input.Keyboard; import java.util.ArrayList; import java.util.Arrays; @@ -331,6 +333,42 @@ public class InventoryConfig { @ConfigOption(name = "Show Numbers", desc = "In the Harp, show buttons as stack size (intended to be used with the Keybinds).") @ConfigEditorBoolean public boolean showNumbers = false; + + @Expose + @ConfigOption(name = "Keybinds", desc = "") + @Accordion + public HarpConfigKeyBinds harpKeybinds = new HarpConfigKeyBinds(); + + public static class HarpConfigKeyBinds { + @Expose + @ConfigOption(name = "Key 1", desc = "Key for the first Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_1) + public int key1 = Keyboard.KEY_1; + @Expose + @ConfigOption(name = "Key 2", desc = "Key for the second Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_2) + public int key2 = Keyboard.KEY_2; + @Expose + @ConfigOption(name = "Key 3", desc = "Key for the third Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_3) + public int key3 = Keyboard.KEY_3; + @Expose + @ConfigOption(name = "Key 4", desc = "Key for the fourth Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_4) + public int key4 = Keyboard.KEY_4; + @Expose + @ConfigOption(name = "Key 5", desc = "Key for the fifth Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_5) + public int key5 = Keyboard.KEY_5; + @Expose + @ConfigOption(name = "Key 6", desc = "Key for the sixth Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_6) + public int key6 = Keyboard.KEY_6; + @Expose + @ConfigOption(name = "Key 7", desc = "Key for the seventh Node") + @ConfigEditorKeybind(defaultKey = Keyboard.KEY_7) + public int key7 = Keyboard.KEY_7; + } } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt index e793cd615..3c0a40870 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt @@ -12,23 +12,39 @@ import net.minecraft.client.gui.inventory.GuiChest import net.minecraft.item.Item import net.minecraftforge.client.event.GuiScreenEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import org.lwjgl.input.Keyboard import kotlin.time.Duration.Companion.milliseconds // Delaying key presses by 300ms comes from NotEnoughUpdates -class HarpFeatures { - private val config get() = SkyHanniMod.feature.inventory.helper.harp +object HarpFeatures { + val config get() = SkyHanniMod.feature.inventory.helper.harp private var lastClick = SimpleTimeMark.farPast() - private val keys = listOf( - Keyboard.KEY_1, - Keyboard.KEY_2, - Keyboard.KEY_3, - Keyboard.KEY_4, - Keyboard.KEY_5, - Keyboard.KEY_6, - Keyboard.KEY_7 - ) + private object keys : + Iterable { + override fun iterator(): Iterator { + return object : Iterator { + private var currentIndex = 0 + + override fun hasNext(): Boolean { + return currentIndex < 7 + } + + override fun next(): Int { + return when (currentIndex++) { + 0 -> HarpFeatures.config.harpKeybinds.key1 + 1 -> HarpFeatures.config.harpKeybinds.key2 + 2 -> HarpFeatures.config.harpKeybinds.key3 + 3 -> HarpFeatures.config.harpKeybinds.key4 + 4 -> HarpFeatures.config.harpKeybinds.key5 + 5 -> HarpFeatures.config.harpKeybinds.key6 + 6 -> HarpFeatures.config.harpKeybinds.key7 + else -> throw NoSuchElementException() + } + } + } + } + + } private val buttonColors = listOf('d', 'e', 'a', '2', '5', '9', 'b') @@ -39,12 +55,12 @@ class HarpFeatures { if (!openInventoryName().startsWith("Harp")) return val chest = event.gui as? GuiChest ?: return - for (key in keys) { + for ((index, key) in keys.withIndex()) { if (key.isKeyHeld()) { if (lastClick.passedSince() > 200.milliseconds) { Minecraft.getMinecraft().playerController.windowClick( chest.inventorySlots.windowId, - 35 + key, + 37 + index, 2, 3, Minecraft.getMinecraft().thePlayer @@ -75,4 +91,4 @@ class HarpFeatures { event.move(2, "misc.harpKeybinds", "inventory.helper.harp.keybinds") event.move(2, "misc.harpNumbers", "inventory.helper.harp.showNumbers") } -} \ No newline at end of file +} -- cgit From 3d1b6f71080f2cfc48a36db8880da64073f023bb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 20:28:51 +0100 Subject: code cleanup --- .../skyhanni/features/inventory/HarpFeatures.kt | 62 ++++++++++------------ 1 file changed, 27 insertions(+), 35 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt index 3c0a40870..f2b17d79d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt @@ -19,31 +19,24 @@ object HarpFeatures { val config get() = SkyHanniMod.feature.inventory.helper.harp private var lastClick = SimpleTimeMark.farPast() - private object keys : - Iterable { - override fun iterator(): Iterator { - return object : Iterator { - private var currentIndex = 0 + private object KeyIterable : Iterable { + override fun iterator() = object : Iterator { + private var currentIndex = 0 - override fun hasNext(): Boolean { - return currentIndex < 7 - } + override fun hasNext() = currentIndex < 7 - override fun next(): Int { - return when (currentIndex++) { - 0 -> HarpFeatures.config.harpKeybinds.key1 - 1 -> HarpFeatures.config.harpKeybinds.key2 - 2 -> HarpFeatures.config.harpKeybinds.key3 - 3 -> HarpFeatures.config.harpKeybinds.key4 - 4 -> HarpFeatures.config.harpKeybinds.key5 - 5 -> HarpFeatures.config.harpKeybinds.key6 - 6 -> HarpFeatures.config.harpKeybinds.key7 - else -> throw NoSuchElementException() - } - } + override fun next() = when (currentIndex++) { + 0 -> config.harpKeybinds.key1 + 1 -> config.harpKeybinds.key2 + 2 -> config.harpKeybinds.key3 + 3 -> config.harpKeybinds.key4 + 4 -> config.harpKeybinds.key5 + 5 -> config.harpKeybinds.key6 + 6 -> config.harpKeybinds.key7 + + else -> throw NoSuchElementException("currentIndex: $currentIndex") } } - } private val buttonColors = listOf('d', 'e', 'a', '2', '5', '9', 'b') @@ -55,20 +48,19 @@ object HarpFeatures { if (!openInventoryName().startsWith("Harp")) return val chest = event.gui as? GuiChest ?: return - for ((index, key) in keys.withIndex()) { - if (key.isKeyHeld()) { - if (lastClick.passedSince() > 200.milliseconds) { - Minecraft.getMinecraft().playerController.windowClick( - chest.inventorySlots.windowId, - 37 + index, - 2, - 3, - Minecraft.getMinecraft().thePlayer - ) // middle clicks > left clicks - lastClick = SimpleTimeMark.now() - } - break - } + for ((index, key) in KeyIterable.withIndex()) { + if (!key.isKeyHeld()) continue + if (lastClick.passedSince() < 200.milliseconds) break + + Minecraft.getMinecraft().playerController.windowClick( + chest.inventorySlots.windowId, + 37 + index, + 2, + 3, + Minecraft.getMinecraft().thePlayer + ) // middle clicks > left clicks + lastClick = SimpleTimeMark.now() + break } } -- cgit From 1618ea0aeb9118c4e12dc0837c8d77226fa7d8a9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 20:32:12 +0100 Subject: Show the custom hotkey name in the harp inventory. --- .../skyhanni/features/inventory/HarpFeatures.kt | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt index f2b17d79d..f210f857c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.RenderItemTipEvent import at.hannibal2.skyhanni.utils.InventoryUtils.openInventoryName +import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.SimpleTimeMark @@ -25,17 +26,7 @@ object HarpFeatures { override fun hasNext() = currentIndex < 7 - override fun next() = when (currentIndex++) { - 0 -> config.harpKeybinds.key1 - 1 -> config.harpKeybinds.key2 - 2 -> config.harpKeybinds.key3 - 3 -> config.harpKeybinds.key4 - 4 -> config.harpKeybinds.key5 - 5 -> config.harpKeybinds.key6 - 6 -> config.harpKeybinds.key7 - - else -> throw NoSuchElementException("currentIndex: $currentIndex") - } + override fun next() = getKey(currentIndex++) ?: throw NoSuchElementException("currentIndex: $currentIndex") } } @@ -64,6 +55,18 @@ object HarpFeatures { } } + fun getKey(index: Int) = when (index) { + 0 -> config.harpKeybinds.key1 + 1 -> config.harpKeybinds.key2 + 2 -> config.harpKeybinds.key3 + 3 -> config.harpKeybinds.key4 + 4 -> config.harpKeybinds.key5 + 5 -> config.harpKeybinds.key6 + 6 -> config.harpKeybinds.key7 + + else -> null + } + @SubscribeEvent fun onRenderItemTip(event: RenderItemTipEvent) { if (!LorenzUtils.inSkyBlock) return @@ -75,7 +78,8 @@ object HarpFeatures { val index = buttonColors.indexOfFirst { it == event.stack.displayName[1] } if (index == -1) return // this should never happen unless there's an update - event.stackTip = (index + 1).toString() + val keyCode = getKey(index) ?: return + event.stackTip = KeyboardManager.getKeyName(keyCode) } @SubscribeEvent -- cgit From 667fd43324e5610ec16a12ef42d4e4d3aff75419 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sat, 4 Nov 2023 07:03:19 +1100 Subject: add expired pumpkin to farming fortune (#673) Added command /shpumpkin to toggle include/exclude Expired Pumpkin farming fortune in the /ff gui and in the true ff display. #673 --- src/main/java/at/hannibal2/skyhanni/config/Storage.java | 3 +++ .../java/at/hannibal2/skyhanni/config/commands/Commands.kt | 4 ++++ .../skyhanni/features/garden/FarmingFortuneDisplay.kt | 11 ++++++++--- .../features/garden/fortuneguide/CaptureFarmingGear.kt | 5 +++++ .../skyhanni/features/garden/fortuneguide/FFStats.kt | 7 ++++++- .../skyhanni/features/garden/fortuneguide/FortuneStats.kt | 5 +++-- 6 files changed, 29 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 951e80ebf..173b48fa4 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -250,6 +250,9 @@ public class Storage { @Expose public boolean carrotFortune = false; + @Expose + public boolean pumpkinFortune = false; + @Expose public Map farmingItems = new HashMap<>(); } diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 69e8e5933..4a7e6cdcb 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -215,6 +215,10 @@ object Commands { "shcarrot", "Toggles receiving the 12 fortune from carrots" ) { CaptureFarmingGear.reverseCarrotFortune() } + registerCommand( + "shpumpkin", + "Toggles receiving the 12 fortune from pumpkins" + ) { CaptureFarmingGear.reversePumpkinFortune() } registerCommand( "shrepostatus", "Shows the status of all the mods constants" diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 17fc083fa..5bf5bbe8f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -270,14 +270,19 @@ class FarmingFortuneDisplay { val accessoryFortune = accessoryFortune ?: 0.0 val baseFortune = if (alwaysBaseFortune) 100.0 else baseFortune - var carrotFortune = 0.0 + var otherFortune = 0.0 if (currentCrop == CropType.CARROT) { GardenAPI.config?.fortune?.let { - if (it.carrotFortune) carrotFortune = 12.0 + if (it.carrotFortune) otherFortune = 12.0 } } - return baseFortune + upgradeFortune + tabFortune + toolFortune + accessoryFortune + carrotFortune + if (currentCrop == CropType.PUMPKIN) { + GardenAPI.config?.fortune?.let { + if (it.pumpkinFortune) otherFortune = 12.0 + } + } + return baseFortune + upgradeFortune + tabFortune + toolFortune + accessoryFortune + otherFortune } fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt index 3a4844f2d..b4d0fa372 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt @@ -84,6 +84,11 @@ class CaptureFarmingGear { hidden.carrotFortune = !hidden.carrotFortune LorenzUtils.chat("§2Toggled exportable carrot fortune to: ${hidden.carrotFortune}") } + fun reversePumpkinFortune() { + val hidden = GardenAPI.config?.fortune ?: return + hidden.pumpkinFortune = !hidden.pumpkinFortune + LorenzUtils.chat("§2Toggled expired pumpkin fortune to: ${hidden.pumpkinFortune}") + } } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt index 7e9c9399a..8765bd19b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt @@ -155,6 +155,11 @@ object FFStats { val carrotFortune = if (hidden.carrotFortune) 12.0 else 0.0 cropPage[FortuneStats.EXPORTED_CARROT] = Pair(carrotFortune, 12.0) } + if (crop == CropType.PUMPKIN) { + val hidden = GardenAPI.config?.fortune ?: return + val pumpkinFortune = if (hidden.pumpkinFortune) 12.0 else 0.0 + cropPage[FortuneStats.EXPIRED_PUMPKIN] = Pair(pumpkinFortune, 12.0) + } cropPage[FortuneStats.CROP_TOTAL] = Pair( cropPage.toList().sumOf { it.second.first }, @@ -257,4 +262,4 @@ object FFStats { } return 0.0 } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt index 77c275973..fc759ac04 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt @@ -19,5 +19,6 @@ enum class FortuneStats(val label: String, val tooltip: String) { CULTIVATING("§2Cultivating Enchantment", "§7§2Fortune for each enchantment level\n§2You get 2☘ per level"), TURBO("§2Turbo-Crop Enchantment", "§7§2Fortune for each enchantment level\n§2You get 5☘ per level"), DEDICATION("§2Dedication Enchantment", "§7§2Fortune for each enchantment level\n§2and crop milestone"), - EXPORTED_CARROT("§2Exported Carrot", "§7§2Gain 12☘ from exporting Carrots in the Rift!\n§eRun /shcarrot to toggle the stat") -} \ No newline at end of file + EXPORTED_CARROT("§2Exported Carrot", "§7§2Gain 12☘ from exporting Carrots in the Rift!\n§eRun /shcarrot to toggle the stat"), + EXPIRED_PUMPKIN("§2Expired Pumpkin", "§7§2Gain 12☘ from letting Pumpkins expire!\n§eRun /shpumpkin to toggle the stat") +} -- cgit From 26879e9ff88c2a6e3bcd665606aef47ea97cdb5a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:04:17 +0100 Subject: code cleanup --- .../java/at/hannibal2/skyhanni/config/Storage.java | 38 +++++++++++----------- .../features/garden/FarmingFortuneDisplay.kt | 30 +++++++++-------- .../garden/fortuneguide/CaptureFarmingGear.kt | 13 ++++---- .../features/garden/fortuneguide/FFStats.kt | 8 ++--- .../features/garden/fortuneguide/FortuneStats.kt | 14 ++++++-- 5 files changed, 57 insertions(+), 46 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 173b48fa4..ad17625fd 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -92,9 +92,9 @@ public class Storage { @Override public String toString() { return "MinionConfig{" + - "displayName='" + displayName + '\'' + - ", lastClicked=" + lastClicked + - '}'; + "displayName='" + displayName + '\'' + + ", lastClicked=" + lastClicked + + '}'; } } @@ -380,22 +380,22 @@ public class Storage { @Override public String toString() { return "SlayerItemProfit{" + - "internalName='" + internalName + '\'' + - ", timesDropped=" + timesDropped + - ", totalAmount=" + totalAmount + - ", hidden=" + hidden + - '}'; + "internalName='" + internalName + '\'' + + ", timesDropped=" + timesDropped + + ", totalAmount=" + totalAmount + + ", hidden=" + hidden + + '}'; } } @Override public String toString() { return "SlayerProfitList{" + - "items=" + items + - ", mobKillCoins=" + mobKillCoins + - ", slayerSpawnCost=" + slayerSpawnCost + - ", slayerCompletedCount=" + slayerCompletedCount + - '}'; + "items=" + items + + ", mobKillCoins=" + mobKillCoins + + ", slayerSpawnCost=" + slayerSpawnCost + + ", slayerCompletedCount=" + slayerCompletedCount + + '}'; } } @@ -419,11 +419,11 @@ public class Storage { @Override public String toString() { return "SlayerRngMeterStorage{" + - "currentMeter=" + currentMeter + - ", gainPerBoss=" + gainPerBoss + - ", goalNeeded=" + goalNeeded + - ", itemGoal='" + itemGoal + '\'' + - '}'; + "currentMeter=" + currentMeter + + ", gainPerBoss=" + gainPerBoss + + ", goalNeeded=" + goalNeeded + + ", itemGoal='" + itemGoal + '\'' + + '}'; } } @@ -454,7 +454,7 @@ public class Storage { public int selfKillingAnimals; @Expose - public Map animalRarities= new HashMap<>(); + public Map animalRarities = new HashMap<>(); } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 5bf5bbe8f..6cdf64ca6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -140,7 +140,6 @@ class FarmingFortuneDisplay { private fun isEnabled(): Boolean = GardenAPI.inGarden() && config.display - companion object { private val config get() = SkyHanniMod.feature.garden.farmingFortunes private val latestFF: MutableMap? get() = GardenAPI.config?.latestTrueFarmingFortune @@ -251,17 +250,20 @@ class FarmingFortuneDisplay { itemBaseFortune = 0.0 greenThumbFortune = 0.0 for (line in tool?.getLore()!!) { - val match = tooltipFortunePattern.matchEntire(line)?.groups - if (match != null) { - displayedFortune = match[1]!!.value.toDouble() - reforgeFortune = match[2]?.value?.toDouble() ?: 0.0 - - itemBaseFortune = if (tool.getInternalName().contains("LOTUS")) 5.0 - else displayedFortune - reforgeFortune - enchantmentFortune - (tool.getFarmingForDummiesCount() ?: 0 ) * 1.0 - greenThumbFortune = if (tool.getInternalName().contains("LOTUS")) { - displayedFortune - reforgeFortune - itemBaseFortune - } else 0.0 + val match = tooltipFortunePattern.matchEntire(line)?.groups ?: continue + + displayedFortune = match[1]!!.value.toDouble() + reforgeFortune = match[2]?.value?.toDouble() ?: 0.0 + + itemBaseFortune = if (tool.getInternalName().contains("LOTUS")) { + 5.0 + } else { + val dummiesFF = (tool.getFarmingForDummiesCount() ?: 0) * 1.0 + displayedFortune - reforgeFortune - enchantmentFortune - dummiesFF } + greenThumbFortune = if (tool.getInternalName().contains("LOTUS")) { + displayedFortune - reforgeFortune - itemBaseFortune + } else 0.0 } } @@ -290,8 +292,8 @@ class FarmingFortuneDisplay { @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.move(3,"garden.farmingFortuneDisplay", "garden.farmingFortunes.display") - event.move(3,"garden.farmingFortuneDropMultiplier", "garden.farmingFortunes.dropMultiplier") - event.move(3,"garden.farmingFortunePos", "garden.farmingFortunes.pos") + event.move(3, "garden.farmingFortuneDisplay", "garden.farmingFortunes.display") + event.move(3, "garden.farmingFortuneDropMultiplier", "garden.farmingFortunes.dropMultiplier") + event.move(3, "garden.farmingFortunePos", "garden.farmingFortunes.pos") } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt index b4d0fa372..47c64032c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt @@ -80,14 +80,15 @@ class CaptureFarmingGear { } fun reverseCarrotFortune() { - val hidden = GardenAPI.config?.fortune ?: return - hidden.carrotFortune = !hidden.carrotFortune - LorenzUtils.chat("§2Toggled exportable carrot fortune to: ${hidden.carrotFortune}") + val storage = GardenAPI.config?.fortune ?: return + storage.carrotFortune = !storage.carrotFortune + LorenzUtils.chat("§2Toggled exportable carrot fortune to: ${storage.carrotFortune}") } + fun reversePumpkinFortune() { - val hidden = GardenAPI.config?.fortune ?: return - hidden.pumpkinFortune = !hidden.pumpkinFortune - LorenzUtils.chat("§2Toggled expired pumpkin fortune to: ${hidden.pumpkinFortune}") + val storage = GardenAPI.config?.fortune ?: return + storage.pumpkinFortune = !storage.pumpkinFortune + LorenzUtils.chat("§2Toggled expired pumpkin fortune to: ${storage.pumpkinFortune}") } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt index 8765bd19b..24d125d56 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt @@ -151,13 +151,13 @@ object FFStats { else -> {} } if (crop == CropType.CARROT) { - val hidden = GardenAPI.config?.fortune ?: return - val carrotFortune = if (hidden.carrotFortune) 12.0 else 0.0 + val storage = GardenAPI.config?.fortune ?: return + val carrotFortune = if (storage.carrotFortune) 12.0 else 0.0 cropPage[FortuneStats.EXPORTED_CARROT] = Pair(carrotFortune, 12.0) } if (crop == CropType.PUMPKIN) { - val hidden = GardenAPI.config?.fortune ?: return - val pumpkinFortune = if (hidden.pumpkinFortune) 12.0 else 0.0 + val storage = GardenAPI.config?.fortune ?: return + val pumpkinFortune = if (storage.pumpkinFortune) 12.0 else 0.0 cropPage[FortuneStats.EXPIRED_PUMPKIN] = Pair(pumpkinFortune, 12.0) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt index fc759ac04..af02f7577 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneStats.kt @@ -4,7 +4,7 @@ enum class FortuneStats(val label: String, val tooltip: String) { BASE( "§2Universal Farming Fortune", "§7§2Farming fortune in that is\n§2applied to every crop\n§eNot the same as tab FF\n" + - "§eSee on the grass block page" + "§eSee on the grass block page" ), CROP_TOTAL("§6Crop Farming Fortune", "§7§2Farming fortune for this crop"), ACCESSORY("§2Talisman Bonus", "§7§2Fortune from your talisman\n§2You get 10☘ per talisman tier"), @@ -19,6 +19,14 @@ enum class FortuneStats(val label: String, val tooltip: String) { CULTIVATING("§2Cultivating Enchantment", "§7§2Fortune for each enchantment level\n§2You get 2☘ per level"), TURBO("§2Turbo-Crop Enchantment", "§7§2Fortune for each enchantment level\n§2You get 5☘ per level"), DEDICATION("§2Dedication Enchantment", "§7§2Fortune for each enchantment level\n§2and crop milestone"), - EXPORTED_CARROT("§2Exported Carrot", "§7§2Gain 12☘ from exporting Carrots in the Rift!\n§eRun /shcarrot to toggle the stat"), - EXPIRED_PUMPKIN("§2Expired Pumpkin", "§7§2Gain 12☘ from letting Pumpkins expire!\n§eRun /shpumpkin to toggle the stat") + EXPORTED_CARROT( + "§2Exported Carrot", + "§7§2Gain 12☘ from exporting Carrots in the Rift!\n" + + "§eRun /shcarrot to toggle the stat" + ), + EXPIRED_PUMPKIN( + "§2Expired Pumpkin", + "§7§2Gain 12☘ from letting Pumpkins expire!\n" + + "§eRun /shpumpkin to toggle the stat" + ) } -- cgit From 3c764298d747ba13f40c1f5cfb4329b62c91baaa Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:07:33 +0100 Subject: code cleanup --- src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java index 86f60a8f7..396946373 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java @@ -40,7 +40,7 @@ public class MiscConfig { public static class PetExperienceToolTipConfig { @Expose - @ConfigOption(name = "Enabled", desc = "Show the full pet exp and the progress to level 100 (ignoring rarity) when hovering over a pet while pressing shift key.") + @ConfigOption(name = "Enabled", desc = "Show the full pet exp and the progress to level 100 (ignoring rarity) when hovering over a pet while pressing shift key.") @ConfigEditorBoolean @FeatureToggle public boolean petDisplay = true; -- cgit From a645741ceb9a407acba9b9fa116334943207824f Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sat, 4 Nov 2023 07:12:52 +1100 Subject: show a gui when mouse is locked (#677) Added a gui element to remind you while /shmouselock is enabled. #677 --- .../java/at/hannibal2/skyhanni/config/features/MiscConfig.java | 3 +++ .../java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt | 8 ++++++++ 2 files changed, 11 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java index 396946373..ec9c8dd61 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java @@ -822,6 +822,9 @@ public class MiscConfig { @Expose public Position showTimeInLimboPosition = new Position(400, 200, 1.3f); + @Expose + public Position lockedMouseDisplay = new Position(400, 200, 0.8f); + @Expose public Position inventoryLoadPos = new Position(394, 124, false, true); } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt index b4ab08459..d9887a26e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt @@ -1,8 +1,10 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.RenderUtils.renderString import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -33,4 +35,10 @@ object LockMouseLook { LorenzUtils.chat("§e[SkyHanni] §bMouse rotation is now unlocked.") } } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + if (!lockedMouse) return + SkyHanniMod.feature.misc.lockedMouseDisplay.renderString("§eMouse Locked", posLabel = "Mouse Locked") + } } -- cgit From cd244fd5969be832de68eb47ec7c3fda963c998e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:13:22 +0100 Subject: code cleanup --- .../skyhanni/config/features/MiscConfig.java | 168 +++++++++++---------- 1 file changed, 86 insertions(+), 82 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java index ec9c8dd61..2fc113216 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/MiscConfig.java @@ -25,6 +25,7 @@ public class MiscConfig { @ConfigOption(name = "Pet", desc = "") @Accordion public PetConfig pets = new PetConfig(); + public static class PetConfig { @Expose @ConfigOption(name = "Pet Display", desc = "Show the currently active pet.") @@ -84,6 +85,7 @@ public class MiscConfig { @ConfigOption(name = "Potion Effects", desc = "") @Accordion public PotionEffectsConfig potionEffect = new PotionEffectsConfig(); + public static class PotionEffectsConfig { @Expose @ConfigOption(name = "Non God Pot Effects", desc = "Display the active potion effects that are not part of the God Pot.") @@ -105,6 +107,7 @@ public class MiscConfig { @ConfigOption(name = "Particle Hider", desc = "") @Accordion public ParticleHiderConfig particleHiders = new ParticleHiderConfig(); + public static class ParticleHiderConfig { @Expose @ConfigOption(name = "Blaze Particles", desc = "Hide Blaze particles.") @@ -153,6 +156,7 @@ public class MiscConfig { @ConfigOption(name = "Estimated Item Value", desc = "(Prices for Enchantments, Reforge Stones, Gemstones, Drill Parts and more)") @Accordion public EstimatedItemValueConfig estimatedItemValues = new EstimatedItemValueConfig(); + public static class EstimatedItemValueConfig { @Expose @ConfigOption(name = "Enable Estimated Price", desc = "Displays an Estimated Item Value for the item you hover over.") @@ -173,9 +177,9 @@ public class MiscConfig { @Expose @ConfigOption(name = "Enchantments Cap", desc = "Only show the top # most expensive enchantments.") @ConfigEditorSlider( - minValue = 1, - maxValue = 30, - minStep = 1 + minValue = 1, + maxValue = 30, + minStep = 1 ) public Property enchantmentsCap = Property.of(7); @@ -210,38 +214,38 @@ public class MiscConfig { @Expose @ConfigOption(name = "First Line", desc = "Decide what to show in the first line.") @ConfigEditorDropdown(values = { - "Nothing", - "Location", - "Purse", - "Bits", - "Stats", - "Held Item", - "SkyBlock Date", - "Profile", - "Slayer", - "Custom", - "Dynamic", - "Crop Milestone", - "Current Pet" + "Nothing", + "Location", + "Purse", + "Bits", + "Stats", + "Held Item", + "SkyBlock Date", + "Profile", + "Slayer", + "Custom", + "Dynamic", + "Crop Milestone", + "Current Pet" }) public Property firstLine = Property.of(0); @Expose @ConfigOption(name = "Second Line", desc = "Decide what to show in the second line.") @ConfigEditorDropdown(values = { - "Nothing", - "Location", - "Purse", - "Bits", - "Stats", - "Held Item", - "SkyBlock Date", - "Profile", - "Slayer", - "Custom", - "Dynamic", - "Crop Milestone", - "Current Pet" + "Nothing", + "Location", + "Purse", + "Bits", + "Stats", + "Held Item", + "SkyBlock Date", + "Profile", + "Slayer", + "Custom", + "Dynamic", + "Crop Milestone", + "Current Pet" }) public Property secondLine = Property.of(0); @@ -253,31 +257,31 @@ public class MiscConfig { @Expose @ConfigOption(name = "Dynamic Priority", desc = "Disable certain dynamic statuses, or change the priority in case two are triggered at the same time (higher up means higher priority).") @ConfigEditorDraggableList( - exampleText = { - "Crop Milestones", - "Slayer", - "Stacking Enchantment", - "Dungeon", - "AFK Indicator" - } + exampleText = { + "Crop Milestones", + "Slayer", + "Stacking Enchantment", + "Dungeon", + "AFK Indicator" + } ) public List autoPriority = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4)); @Expose @ConfigOption(name = "Dynamic Fallback", desc = "What to show when none of your \"Dynamic Priority\" statuses are active.") @ConfigEditorDropdown(values = { - "Nothing", - "Location", - "Purse", - "Bits", - "Stats", - "Held Item", - "SkyBlock Date", - "Profile", - "Slayer", - "Custom", - "Crop Milestone", - "Current Pet" + "Nothing", + "Location", + "Purse", + "Bits", + "Stats", + "Held Item", + "SkyBlock Date", + "Profile", + "Slayer", + "Custom", + "Crop Milestone", + "Current Pet" }) public Property auto = Property.of(0); } @@ -291,9 +295,9 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Enable Data Tracker", - desc = "Tracks all of your data from doing Trevor Quests.\n" + - "Shows based on the setting below." + name = "Enable Data Tracker", + desc = "Tracks all of your data from doing Trevor Quests.\n" + + "Shows based on the setting below." ) @ConfigEditorBoolean @FeatureToggle @@ -301,33 +305,33 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Show Between Quests", - desc = "Shows the tracker during and between quests otherwise it will only show during them." + - "Will show in the Trapper's Den regardless. §cToggle 'Enable Data Tracker' above." + name = "Show Between Quests", + desc = "Shows the tracker during and between quests otherwise it will only show during them." + + "Will show in the Trapper's Den regardless. §cToggle 'Enable Data Tracker' above." ) @ConfigEditorBoolean public boolean displayType = true; @Expose @ConfigOption( - name = "Text Format", - desc = "Drag text to change the appearance of the overlay." + name = "Text Format", + desc = "Drag text to change the appearance of the overlay." ) @ConfigEditorDraggableList( - exampleText = { - "§b§lTrevor Data Tracker", - "§b1,428 §9Quests Started", - "§b11,281 §5Total Pelts Gained", - "§b2,448 §5Pelts Per Hour", - "", - "§b850 §cKilled Animals", - "§b153 §cSelf Killing Animals", - "§b788 §fTrackable Animals", - "§b239 §aUntrackable Animals", - "§b115 §9Undetected Animals", - "§b73 §5Endangered Animals", - "§b12 §6Elusive Animals" - } + exampleText = { + "§b§lTrevor Data Tracker", + "§b1,428 §9Quests Started", + "§b11,281 §5Total Pelts Gained", + "§b2,448 §5Pelts Per Hour", + "", + "§b850 §cKilled Animals", + "§b153 §cSelf Killing Animals", + "§b788 §fTrackable Animals", + "§b239 §aUntrackable Animals", + "§b115 §9Undetected Animals", + "§b73 §5Endangered Animals", + "§b12 §6Elusive Animals" + } ) public List textFormat = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11)); @@ -336,7 +340,7 @@ public class MiscConfig { @Expose @ConfigOption(name = "Trapper Solver", desc = "Assists you in finding Trevor's mobs. §eNote: May not always work as expected. " + - "§cWill not help you to find rabbits or sheep in the Oasis!") + "§cWill not help you to find rabbits or sheep in the Oasis!") @ConfigEditorBoolean @FeatureToggle public boolean trapperSolver = true; @@ -360,7 +364,7 @@ public class MiscConfig { @Expose @ConfigOption(name = "Trapper Hotkey", desc = "Press this key to warp to Trevor's Den or to accept the quest. " + - "§eRequires the relevant above settings to be toggled") + "§eRequires the relevant above settings to be toggled") @ConfigEditorKeybind(defaultKey = Keyboard.KEY_NONE) public int keyBindWarpTrapper = Keyboard.KEY_NONE; @@ -373,8 +377,8 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Trapper Cooldown GUI", - desc = "Show the cooldown on screen in an overlay (intended for Abiphone users)." + name = "Trapper Cooldown GUI", + desc = "Show the cooldown on screen in an overlay (intended for Abiphone users)." ) @ConfigEditorBoolean public boolean trapperCooldownGui = false; @@ -577,8 +581,8 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Outline Color", - desc = "The color to outline party members in." + name = "Outline Color", + desc = "The color to outline party members in." ) @ConfigEditorColour public String outlineColor = "0:245:85:255:85"; @@ -594,7 +598,7 @@ public class MiscConfig { public static class CompactTabListConfig { @Expose @ConfigOption(name = "Enabled", desc = "Compacts the tablist to make it look much nicer like SBA did. Also " + - "doesn't break god-pot detection and shortens some other lines.") + "doesn't break god-pot detection and shortens some other lines.") //made tablist one word here so both searches will pick it up @ConfigEditorBoolean @FeatureToggle @@ -669,9 +673,9 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Mark SkyHanni Devs", - desc = "Adds a §c:O §7behind the tablist name of §cSkyHanni's contributors§7. " + - "§eThose are the folks that coded the mod for you for free :)" + name = "Mark SkyHanni Devs", + desc = "Adds a §c:O §7behind the tablist name of §cSkyHanni's contributors§7. " + + "§eThose are the folks that coded the mod for you for free :)" ) @ConfigEditorBoolean public boolean markSkyHanniContributors = false; @@ -813,8 +817,8 @@ public class MiscConfig { @Expose @ConfigOption( - name = "Time In Limbo", - desc = "Show the time since you entered the limbo.") + name = "Time In Limbo", + desc = "Show the time since you entered the limbo.") @ConfigEditorBoolean @FeatureToggle public boolean showTimeInLimbo = true; -- cgit From e578369625f800200e5a4606fb162f41ebf0311a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:19:18 +0100 Subject: Fixed item ability cooldown not activating for Sword of Bad Health. --- .../features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt index 4bf1d38ff..974deb26e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt @@ -185,11 +185,13 @@ class ItemAbilityCooldown { ItemAbility.RAGNAROCK_AXE.activate(LorenzColor.WHITE, 3_000) } } + message.contains("§lCASTING") -> { if (ItemAbility.RAGNAROCK_AXE.specialColor != LorenzColor.DARK_PURPLE) { ItemAbility.RAGNAROCK_AXE.activate(LorenzColor.DARK_PURPLE, 10_000) } } + message.contains("§c§lCANCELLED") -> { ItemAbility.RAGNAROCK_AXE.activate(null, 17_000) } @@ -273,7 +275,7 @@ class ItemAbilityCooldown { val guiOpen = Minecraft.getMinecraft().currentScreen != null val uuid = stack.getIdentifier() ?: return val list = items.filter { (it.key.getIdentifier()) == uuid } - .firstNotNullOfOrNull { it.value } ?: return + .firstNotNullOfOrNull { it.value } ?: return for (itemText in list) { if (guiOpen && !itemText.onCooldown) continue @@ -324,6 +326,9 @@ class ItemAbilityCooldown { if (message == "§cRagnarock was cancelled due to being hit!") { ItemAbility.RAGNAROCK_AXE.activate(null, 17_000) } + "§aYou buffed yourself for §r§c\\+\\d+❁ Strength".toPattern().matchMatcher(message) { + ItemAbility.SWORD_OF_BAD_HEALTH.activate() + } } private fun hasAbility(stack: ItemStack): MutableList { -- cgit From e3dfb7daffde3dd7f47e2c6dba79669eb669ad34 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:24:53 +0100 Subject: code cleanup --- .../features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt index 974deb26e..a547c14b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt @@ -35,6 +35,7 @@ class ItemAbilityCooldown { private var items = mapOf>() private var abilityItems = mapOf>() private val youAlignedOthersPattern = "§eYou aligned §r§a.* §r§eother player(s)?!".toPattern() + private val youBuffedYourselfPattern = "§aYou buffed yourself for §r§c\\+\\d+❁ Strength".toPattern() private val WEIRD_TUBA = "WEIRD_TUBA".asInternalName() private val WEIRDER_TUBA = "WEIRDER_TUBA".asInternalName() private val VOODOO_DOLL_WILTED = "VOODOO_DOLL_WILTED".asInternalName() @@ -326,7 +327,7 @@ class ItemAbilityCooldown { if (message == "§cRagnarock was cancelled due to being hit!") { ItemAbility.RAGNAROCK_AXE.activate(null, 17_000) } - "§aYou buffed yourself for §r§c\\+\\d+❁ Strength".toPattern().matchMatcher(message) { + youBuffedYourselfPattern.matchMatcher(message) { ItemAbility.SWORD_OF_BAD_HEALTH.activate() } } -- cgit From 67a7b2b59b09b49d1fe9ea18611d42cac2667547 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 21:43:34 +0100 Subject: code cleanup --- .../skyhanni/features/misc/items/EstimatedItemValue.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index 5671822cb..e9ec914ee 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -63,6 +63,7 @@ import at.hannibal2.skyhanni.utils.StringUtils.removeColor import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent +import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer import io.github.moulberry.notenoughupdates.recipes.Ingredient import io.github.moulberry.notenoughupdates.util.Constants import net.minecraft.init.Items @@ -119,7 +120,6 @@ object EstimatedItemValue { cache.clear() } - @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { config.enchantmentsCap.onToggle { @@ -584,7 +584,6 @@ object EstimatedItemValue { val enrichmentName = stack.getEnrichment() ?: return 0.0 val internalName = "TALISMAN_ENRICHMENT_$enrichmentName".asInternalName() - val price = internalName.getPrice() val name = internalName.getItemName() list.add("§7Enrichment: $name §7(§6" + NumberUtil.format(price) + "§7)") @@ -695,7 +694,6 @@ object EstimatedItemValue { val itemStack = enchantmentName.getItemStackOrNull() ?: continue val singlePrice = enchantmentName.getPriceOrNull() ?: continue - var name = itemStack.getLore()[0] if (multiplier > 1) { name = "§8${multiplier}x $name" @@ -803,8 +801,8 @@ object EstimatedItemValue { // eg. SAPPHIRE_1 -> Sapphire Slot 2 val displayName = splitSlot[0].lowercase(Locale.ENGLISH).replaceFirstChar(Char::uppercase) + " Slot" + - // If the slot index is 0, we don't need to specify - if (splitSlot[1] != "0") " " + (splitSlot[1].toInt() + 1) else "" + // If the slot index is 0, we don't need to specify + if (splitSlot[1] != "0") " " + (splitSlot[1].toInt() + 1) else "" priceMap[" §$colorCode $displayName §7(§6$formattedPrice§7)"] = totalPrice - previousTotal } @@ -821,6 +819,6 @@ object EstimatedItemValue { event.move(3, "misc.estimatedIemValueAlwaysEnabled", "misc.estimatedItemValues.alwaysEnabled") event.move(3, "misc.estimatedIemValueEnchantmentsCap", "misc.estimatedItemValues.enchantmentsCap") event.move(3, "misc.estimatedIemValueExactPrice", "misc.estimatedItemValues.exactPrice") - event.move(3,"misc.itemPriceDataPos", "misc.estimatedItemValues.itemPriceDataPos") + event.move(3, "misc.itemPriceDataPos", "misc.estimatedItemValues.itemPriceDataPos") } } -- cgit From a6a8d13e007237568747e9dfd5d5b6795cfbb5de Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 22:14:45 +0100 Subject: Added Estimated Item Value support to NEU Profile Viewer --- .../at/hannibal2/skyhanni/data/GuiEditManager.kt | 5 +++-- .../features/misc/items/EstimatedItemValue.kt | 24 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt index 4f3110789..2f7617924 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt @@ -9,6 +9,7 @@ import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isRancherSign import at.hannibal2.skyhanni.utils.NEUItems +import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiChest import net.minecraft.client.gui.inventory.GuiEditSign @@ -26,7 +27,7 @@ class GuiEditManager { if (isInGui()) return Minecraft.getMinecraft().currentScreen?.let { - if (it !is GuiInventory && it !is GuiChest && it !is GuiEditSign) return + if (it !is GuiInventory && it !is GuiChest && it !is GuiEditSign && it !is GuiProfileViewer) return if (it is GuiEditSign && !it.isRancherSign()) return } @@ -95,4 +96,4 @@ class GuiEditManager { } } -class Vector2i(val x: Int, val y: Int) \ No newline at end of file +class Vector2i(val x: Int, val y: Int) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index e9ec914ee..7dfd5656a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -66,8 +66,10 @@ import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer import io.github.moulberry.notenoughupdates.recipes.Ingredient import io.github.moulberry.notenoughupdates.util.Constants +import net.minecraft.client.Minecraft import net.minecraft.init.Items import net.minecraft.item.ItemStack +import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.io.File import java.util.Locale @@ -97,13 +99,28 @@ object EstimatedItemValue { } @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { + fun onTooltip(event: ItemTooltipEvent) { + if (!LorenzUtils.inSkyBlock) return + if (!config.enabled) return + + if (Minecraft.getMinecraft().currentScreen is GuiProfileViewer) { + updateItem(event.itemStack) + tryRendering() + } + } + + private fun tryRendering() { currentlyShowing = checkCurrentlyVisible() if (!currentlyShowing) return config.itemPriceDataPos.renderStringsAndItems(display, posLabel = "Estimated Item Value") } + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { + tryRendering() + } + private fun checkCurrentlyVisible(): Boolean { if (!LorenzUtils.inSkyBlock) return false if (!config.enabled) return false @@ -132,7 +149,10 @@ object EstimatedItemValue { if (!LorenzUtils.inSkyBlock) return if (!config.enabled) return - val item = event.stack + updateItem(event.stack) + } + + private fun updateItem(item: ItemStack) { val oldData = cache[item] if (oldData != null) { display = oldData -- cgit From dedbe709684dde6fa8e0c490bf1f97374c83e222 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 3 Nov 2023 22:27:50 +0100 Subject: code cleanup --- src/main/java/at/hannibal2/skyhanni/data/RenderData.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/RenderData.kt b/src/main/java/at/hannibal2/skyhanni/data/RenderData.kt index f109ea01b..9a57f87cc 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/RenderData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/RenderData.kt @@ -48,4 +48,4 @@ class RenderData { if (!SkyHanniDebugsAndTests.globalRender) return LorenzRenderWorldEvent(event.partialTicks).postAndCatch() } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 3fa8a09ad..79b743996 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -310,8 +310,8 @@ object NEUItems { val name = group("name").trim { it <= ' ' } val ultimate = group("format").lowercase().contains("§l") ((if (ultimate && name != "Ultimate Wise") "ULTIMATE_" else "") - + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() - + ";" + group("level").romanToDecimal()) + + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() + + ";" + group("level").romanToDecimal()) } //Uses NEU -- cgit From c0172bcf3e94ac6a701820d2debda082680f957a Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sat, 4 Nov 2023 08:56:19 +1100 Subject: cleaned up some config stuff and fixed a bug (#682) Fixed the crop name gets replaced to internal name in /shwords. #682 --- .../at/hannibal2/skyhanni/config/ConfigManager.kt | 30 ++-------------------- 1 file changed, 2 insertions(+), 28 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index bfbeb08df..498b2f489 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -2,7 +2,6 @@ package at.hannibal2.skyhanni.config import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity -import at.hannibal2.skyhanni.features.garden.CropType import at.hannibal2.skyhanni.features.misc.update.UpdateManager import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzRarity @@ -126,16 +125,9 @@ class ConfigManager { try { val inputStreamReader = InputStreamReader(FileInputStream(configFile!!), StandardCharsets.UTF_8) val bufferedReader = BufferedReader(inputStreamReader) - val builder = StringBuilder() - for (line in bufferedReader.lines()) { - val result = fixConfig(line) - builder.append(result) - builder.append("\n") - } - logger.log("load-config-now") - val jsonObject = gson.fromJson(builder.toString(), JsonObject::class.java) + val jsonObject = gson.fromJson(bufferedReader.readText(), JsonObject::class.java) val newJsonObject = ConfigUpdaterMigrator.fixConfig(jsonObject) features = gson.fromJson( newJsonObject, @@ -160,16 +152,10 @@ class ConfigManager { try { val inputStreamReader = InputStreamReader(FileInputStream(sackFile!!), StandardCharsets.UTF_8) val bufferedReader = BufferedReader(inputStreamReader) - val builder = StringBuilder() - for (line in bufferedReader.lines()) { - builder.append(line) - builder.append("\n") - } - logger.log("load-sacks-now") sackData = gson.fromJson( - builder.toString(), + bufferedReader.readText(), SackData::class.java ) logger.log("Loaded sacks from file") @@ -205,18 +191,6 @@ class ConfigManager { ) } - private fun fixConfig(line: String): String { - var result = line - for (type in CropType.entries) { - val normal = "\"${type.cropName}\"" - val enumName = "\"${type.name}\"" - while (result.contains(normal)) { - result = result.replace(normal, enumName) - } - } - return result - } - fun saveConfig(reason: String) { if (disableSaving) return logger.log("saveConfig: $reason") -- cgit From 5f042b53c3baad6951c69bba6abaf2511aec00b9 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sat, 4 Nov 2023 08:57:57 +1100 Subject: add pumpkin export (#683) Added auto-detection of Expired Pumpkin farming fortune. #683 --- .../skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt index 47c64032c..38f17dbf3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt @@ -253,5 +253,8 @@ class CaptureFarmingGear { if (msg == "CARROTS EXPORTATION COMPLETE!") { hidden.carrotFortune = true } + if (msg == "PUMPKINS EXPORTATION COMPLETE!") { + hidden.pumpkinFortune = true + } } } -- cgit From 95e0487b3515c93acf3b28cbbda7b7d0bfd659c0 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 4 Nov 2023 00:02:11 +0100 Subject: 0.21 Beta 18 --- CHANGELOG.md | 10 ++++++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index ccf1ba1ce..718921a2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,6 +75,8 @@ + Highlights Visitors outside the Garden. + Block Interacting with Visitors. - nea + Blocks you from interacting with / unlocking Visitors to allow for Dedication Cycling. ++ Added command /shpumpkin to toggle include/exclude Expired Pumpkin farming fortune in the /ff GUI and in the true ff display. - CalMWolfs ++ Added auto-detection of Expired Pumpkin farming fortune. - CalMWolfs #### Events @@ -138,6 +140,11 @@ + Makes the Compact Potion message open the Potion effects menu on click. - jani + Added option to show King Talisman Helper outside Dwarven Mines. - hannibal2 + In-Game Date: Adds support for reading the in-game scoreboard, and also allow sun/moon symbol customization. - Erymanthus ++ Added Estimated Item Value support to NEU Profile Viewer - hannibal2 ++ Added support to import SBE Visual Words into SkyHanni. - HiZe ++ Add custom keybinds for Harp Helper. - Thunderblade73 ++ Show the custom hotkey name in the Harp inventory. - hannibal2 ++ Added a GUI element to remind you while /shmouselock is enabled. - CalMWolfs ### Bug Fixes @@ -207,6 +214,8 @@ + Reset mouse sensitivity back to 100% if you log off with lock mouse look enabled. - hannibal2 + Fixed mouse sensitivity stuck after restarting by storing old sensitivity. - CalMWolfs + Fixed tool fortune. - CalMWolfs ++ Fixed Item Ability Cooldown display not activating for Sword of Bad Health. - hannibal2 ++ Fixed the crop name gets replaced to internal name in /shwords. - hannibal2 #### Config @@ -233,6 +242,7 @@ + Adding 100 lines to MobFinder.kt and making it better readable in the process. - walker + Making ChatFiler.kt way better, storing regex objects for reuse and preparing future repo support. - walker + Added command /shkingfix to reset the internal King Talisman Helper offset. - hannibal2 ++ Updated dependency version of junixsocket in DiscordIPC so that antivirus websites no longer show false positives. - NetheriteMiner ## Version 0.20 diff --git a/build.gradle.kts b/build.gradle.kts index cea2e04e1..cd2087210 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.17" +version = "0.21.Beta.18" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 544089711..9185f9c57 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -322,7 +322,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.17", + version = "0.21.Beta.18", ) class SkyHanniMod { @Mod.EventHandler -- cgit From dfa6c8e5304b36dc9de9c177934d6cbddbd9868d Mon Sep 17 00:00:00 2001 From: NetheriteMiner <88792142+NetheriteMiner@users.noreply.github.com> Date: Sun, 5 Nov 2023 04:46:45 -0500 Subject: Make Quest Item Helper only get amount needed and add Pablo Helper (#615) Added Pablo NPC Helper. #615 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 ++ .../config/features/CrimsonIsleConfig.java | 6 ++++ .../skyhanni/features/nether/PabloHelper.kt | 39 ++++++++++++++++++++++ .../skyhanni/features/nether/QuestItemHelper.kt | 3 ++ 4 files changed, 50 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 9185f9c57..6765e67be 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -235,6 +235,7 @@ import at.hannibal2.skyhanni.features.misc.trevor.TrevorSolver import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker import at.hannibal2.skyhanni.features.misc.update.UpdateManager import at.hannibal2.skyhanni.features.misc.visualwords.ModifyVisualWords +import at.hannibal2.skyhanni.features.nether.PabloHelper import at.hannibal2.skyhanni.features.nether.QuestItemHelper import at.hannibal2.skyhanni.features.nether.ashfang.AshfangBlazes import at.hannibal2.skyhanni.features.nether.ashfang.AshfangBlazingSouls @@ -619,6 +620,7 @@ class SkyHanniMod { loadModule(ShiftClickEquipment()) loadModule(LockMouseLook) loadModule(DungeonFinderFeatures()) + loadModule(PabloHelper()) init() diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java index b9d00f8cd..7dc558b15 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java @@ -148,4 +148,10 @@ public class CrimsonIsleConfig { @ConfigEditorBoolean @FeatureToggle public boolean questItemHelper = false; + + @Expose + @ConfigOption(name = "Pablo NPC Helper", desc = "Similar to Quest Item Helper, shows a clickable message that grabs the flower needed from sacks.") + @ConfigEditorBoolean + @FeatureToggle + public boolean pabloHelper = false; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt new file mode 100644 index 000000000..f34931eb5 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt @@ -0,0 +1,39 @@ +package at.hannibal2.skyhanni.features.nether + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.minutes + +// https://wiki.hypixel.net/Pablo +class PabloHelper { + + // There is a different message if the player asks Pablo with an item in their hand, but I don't think it's necessary + // I'll add it if requested + private val pabloMessagePattern = "\\[NPC] Pablo: Could you bring me an (?[\\w ]+).*".toPattern() + private var lastSentMessage = SimpleTimeMark.farPast() + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!isEnabled()) return + if (lastSentMessage.passedSince() < 5.minutes) return + val pabloMatcher = pabloMessagePattern.matcher(event.message.removeColor()) + + if (!pabloMatcher.matches()) return + val item = pabloMatcher.group("flower") + + if (InventoryUtils.countItemsInLowerInventory { it.name?.contains(item) == true } > 0) return + + LorenzUtils.clickableChat("§e[SkyHanni] Click here to grab an $item from sacks!", "gfs $item 1") + lastSentMessage = SimpleTimeMark.now() + } + + fun isEnabled() = + LorenzUtils.skyBlockIsland == IslandType.CRIMSON_ISLE && SkyHanniMod.feature.crimsonIsle.pabloHelper +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt index 9c23ce8e3..24d47c317 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt @@ -3,6 +3,8 @@ package at.hannibal2.skyhanni.features.nether import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.SimpleTimeMark @@ -29,6 +31,7 @@ class QuestItemHelper { if (!matches()) continue@items questItem = group("name") questAmount = group("amount").toInt() + questAmount -= InventoryUtils.countItemsInLowerInventory { it.name?.contains(questItem) == true } LorenzUtils.clickableChat( "§e[SkyHanni] Click here to grab x$questAmount $questItem from sacks!", "gfs $questItem $questAmount" -- cgit From fd47344a8fb5c9b1657a2696bc298659b9458fd9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 10:47:21 +0100 Subject: code cleanup --- .../config/features/CrimsonIsleConfig.java | 2 +- .../jerry/frozentreasure/FrozenTreasureTracker.kt | 6 ++--- .../features/fishing/trophy/OdgerWaypoint.kt | 2 +- .../skyhanni/features/nether/PabloHelper.kt | 19 ++++++------- .../skyhanni/features/nether/QuestItemHelper.kt | 31 +++++++++++----------- .../at/hannibal2/skyhanni/features/rift/RiftAPI.kt | 5 ++-- .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 5 +--- 7 files changed, 35 insertions(+), 35 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java index 7dc558b15..cb94035a7 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/CrimsonIsleConfig.java @@ -144,7 +144,7 @@ public class CrimsonIsleConfig { @Expose @ConfigOption(name = "Quest Item Helper", desc = "When you open the fetch item quest in the town board, " + - "it shows a clickable chat message that will grab the items needed from the sacks.") + "it shows a clickable chat message that will grab the items needed from the sacks.") @ConfigEditorBoolean @FeatureToggle public boolean questItemHelper = false; diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt index 034761654..ee72bec69 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt @@ -10,9 +10,9 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.PreProfileSwitchEvent -import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy +import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems @@ -161,7 +161,7 @@ class FrozenTreasureTracker { event.move(2, "misc.frozenTreasureTracker", "event.winter.frozenTreasureTracker") } - private fun onJerryWorkshop() = LorenzUtils.inIsland(IslandType.WINTER) + private fun onJerryWorkshop() = IslandType.WINTER.isInIsland() private fun inGlacialCave() = onJerryWorkshop() && ScoreboardData.sidebarLinesFormatted.contains(" §7⏣ §3Glacial Cave") -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt index b3b002c24..99b8240a6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/OdgerWaypoint.kt @@ -58,4 +58,4 @@ class OdgerWaypoint { } fun isEnabled() = IslandType.CRIMSON_ISLE.isInIsland() && config.odgerLocation -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt index f34931eb5..89a0a1917 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt @@ -6,16 +6,19 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.minutes // https://wiki.hypixel.net/Pablo class PabloHelper { + private val config get() = SkyHanniMod.feature.crimsonIsle // There is a different message if the player asks Pablo with an item in their hand, but I don't think it's necessary - // I'll add it if requested + // I'll add it if requested ~NetheriteMiner private val pabloMessagePattern = "\\[NPC] Pablo: Could you bring me an (?[\\w ]+).*".toPattern() private var lastSentMessage = SimpleTimeMark.farPast() @@ -23,17 +26,15 @@ class PabloHelper { fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return if (lastSentMessage.passedSince() < 5.minutes) return - val pabloMatcher = pabloMessagePattern.matcher(event.message.removeColor()) + val itemName = pabloMessagePattern.matchMatcher(event.message.removeColor()) { + group("flower") + } ?: return - if (!pabloMatcher.matches()) return - val item = pabloMatcher.group("flower") + if (InventoryUtils.countItemsInLowerInventory { it.name?.contains(itemName) == true } > 0) return - if (InventoryUtils.countItemsInLowerInventory { it.name?.contains(item) == true } > 0) return - - LorenzUtils.clickableChat("§e[SkyHanni] Click here to grab an $item from sacks!", "gfs $item 1") + LorenzUtils.clickableChat("§e[SkyHanni] Click here to grab an $itemName from sacks!", "gfs $itemName 1") lastSentMessage = SimpleTimeMark.now() } - fun isEnabled() = - LorenzUtils.skyBlockIsland == IslandType.CRIMSON_ISLE && SkyHanniMod.feature.crimsonIsle.pabloHelper + fun isEnabled() = IslandType.CRIMSON_ISLE.isInIsland() && config.pabloHelper } diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt index 24d47c317..e87a3f63b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt @@ -17,8 +17,6 @@ class QuestItemHelper { private val config get() = SkyHanniMod.feature.crimsonIsle private val itemCollectionPattern = ". (?[\\w ]+) x(?\\d+)".toPattern() - private var questItem = "" - private var questAmount = 0 private var lastSentMessage = SimpleTimeMark.farPast() @SubscribeEvent @@ -26,19 +24,22 @@ class QuestItemHelper { if (!isEnabled()) return if (event.inventoryName != "Fetch") return if (lastSentMessage.passedSince() < 1.hours) return - items@ for ((_, item) in event.inventoryItems) { - itemCollectionPattern.matchMatcher(item.displayName.removeColor()) { - if (!matches()) continue@items - questItem = group("name") - questAmount = group("amount").toInt() - questAmount -= InventoryUtils.countItemsInLowerInventory { it.name?.contains(questItem) == true } - LorenzUtils.clickableChat( - "§e[SkyHanni] Click here to grab x$questAmount $questItem from sacks!", - "gfs $questItem $questAmount" - ) - lastSentMessage = SimpleTimeMark.now() - break@items - } + + for ((_, item) in event.inventoryItems) { + val (questItem, need) = itemCollectionPattern.matchMatcher(item.displayName.removeColor()) { + group("name") to group("amount").toInt() + } ?: continue + + val have = InventoryUtils.countItemsInLowerInventory { it.name?.contains(questItem) == true } + if (have >= need) break + + val missingAmount = have - need + LorenzUtils.clickableChat( + "§e[SkyHanni] Click here to grab x$missingAmount $questItem from sacks!", + "gfs $questItem $missingAmount" + ) + lastSentMessage = SimpleTimeMark.now() + break } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt index 3a37cc435..4fbbed3d3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt @@ -5,12 +5,13 @@ import at.hannibal2.skyhanni.config.features.RiftConfig import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import net.minecraft.item.ItemStack object RiftAPI { - fun inRift() = LorenzUtils.inIsland(IslandType.THE_RIFT) + fun inRift() = IslandType.THE_RIFT.isInIsland() val config: RiftConfig get() = SkyHanniMod.feature.rift @@ -30,4 +31,4 @@ object RiftAPI { fun inLivingStillness() = LorenzUtils.skyBlockArea == "Living Stillness" fun inStillgoreChateau() = LorenzUtils.skyBlockArea == "Stillgore Château" || LorenzUtils.skyBlockArea == "Oubliette" fun inDreadfarm() = LorenzUtils.skyBlockArea == "Dreadfarm" -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 751271510..d4f35c2d8 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -431,10 +431,7 @@ object LorenzUtils { && tileSign.signText[3].unformattedText.removeColor() == "speed cap!") } - fun inIsland(island: IslandType) = - inSkyBlock && (skyBlockIsland == island || island == IslandType.CATACOMBS && inDungeons) - - fun IslandType.isInIsland() = inIsland(this) + fun IslandType.isInIsland() = inSkyBlock && (skyBlockIsland == this || this == IslandType.CATACOMBS && inDungeons) fun MutableMap.addOrPut(key: K, number: Int): Int { val currentValue = this[key] ?: 0 -- cgit From adcd8ef05c81592716217a86544901783cb21f37 Mon Sep 17 00:00:00 2001 From: Kimbrian Marshall Date: Sun, 5 Nov 2023 17:16:25 +0700 Subject: Feature: Fish Bait Warning (#635) Added Fishing Bait Warnings. #635 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 + .../skyhanni/config/features/FishingConfig.java | 19 +++++ .../skyhanni/features/fishing/BaitChangeWarning.kt | 89 ++++++++++++++++++++++ .../features/fishing/ShowFishingItemName.kt | 3 +- 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 6765e67be..02d196cc3 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -105,6 +105,7 @@ import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureT import at.hannibal2.skyhanni.features.event.spook.TheGreatSpook import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder import at.hannibal2.skyhanni.features.fame.CityProjectFeatures +import at.hannibal2.skyhanni.features.fishing.BaitChangeWarning import at.hannibal2.skyhanni.features.fishing.ChumBucketHider import at.hannibal2.skyhanni.features.fishing.FishingHookDisplay import at.hannibal2.skyhanni.features.fishing.FishingTimer @@ -621,6 +622,7 @@ class SkyHanniMod { loadModule(LockMouseLook) loadModule(DungeonFinderFeatures()) loadModule(PabloHelper()) + loadModule(BaitChangeWarning()); init() diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java index 6b47c6025..235b606f8 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java @@ -233,6 +233,25 @@ public class FishingConfig { public Position position = new Position(460, -240, 3.4f); } + @Expose + @ConfigOption(name = "Bait Warnings", desc = "") + @Accordion + public FishingBaitWarningsConfig fishingBaitWarning = new FishingBaitWarningsConfig(); + + public static class FishingBaitWarningsConfig { + @Expose + @ConfigOption(name = "Bait Change Warning", desc = "Show warning when fishing bait is changed") + @ConfigEditorBoolean + @FeatureToggle + public boolean baitChangeWarning = false; + + @Expose + @ConfigOption(name = "No Bait Warning", desc = "Show warning when no bait is used") + @ConfigEditorBoolean + @FeatureToggle + public boolean noBaitWarning = false; + } + @Expose @ConfigOption(name = "Rare Sea Creatures", desc = "") @Accordion diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt new file mode 100644 index 000000000..3f0487639 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt @@ -0,0 +1,89 @@ +package at.hannibal2.skyhanni.features.fishing + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.utils.EntityUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SoundUtils +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.getLorenzVec +import at.hannibal2.skyhanni.utils.toLorenzVec +import net.minecraft.client.Minecraft +import net.minecraft.entity.item.EntityItem +import net.minecraft.entity.projectile.EntityFishHook +import net.minecraftforge.event.entity.EntityJoinWorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds + +class BaitChangeWarning { + private val config get() = SkyHanniMod.feature.fishing.fishingBaitWarning + private var bobber: EntityFishHook? = null + private var lastBait: String? = null + private var timeLastCast: Long = 0L + private var isUsingBait: Boolean = false + + @SubscribeEvent + fun onJoinWorld(event: EntityJoinWorldEvent){ + if(!isEnabled()) return + val entity = event.entity ?: return + if(entity !is EntityFishHook) return + if(entity.angler != Minecraft.getMinecraft().thePlayer) return + + bobber = entity; + timeLastCast = System.currentTimeMillis() + isUsingBait = false + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent){ + if(!isEnabled() || bobber == null) return + //Is there a way to get event sent time to be more accurate? + if(System.currentTimeMillis() - timeLastCast < 1000L) return + + if(!isUsingBait && config.noBaitWarning) showNoBaitWarning() + reset() + } + + fun reset(){ + bobber = null + isUsingBait = false + } + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent){ + if(!isEnabled() || !config.baitChangeWarning) return + if(bobber == null) return + for(entityItem in EntityUtils.getEntitiesNearby(bobber!!.getLorenzVec(), 1.5)){ + val itemStack = entityItem.entityItem + var name = itemStack.name ?: continue + name = name.removeColor() + + if((!name.endsWith(" Bait") && !name.startsWith("Obfuscated")) + || itemStack.stackSize != 1) continue + + isUsingBait = true + if(lastBait == null){ + lastBait = name.removeColor() + continue + } + if(name.removeColor() == lastBait) continue + showBaitChangeWarning(lastBait!!, name.removeColor()) + lastBait = name.removeColor() + } + } + + fun showBaitChangeWarning(before: String, after: String){ + SoundUtils.playClickSound() + LorenzUtils.sendTitle("§eBait changed!", 2.seconds) + LorenzUtils.chat("§e" + before + " -> " + after) + } + + fun showNoBaitWarning(){ + SoundUtils.playErrorSound() + LorenzUtils.sendTitle("§cNo bait is used!", 2.seconds) + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.hasFishingRodInHand() +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt index 179b6af20..99fcca5e4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt @@ -55,7 +55,8 @@ class ShowFishingItemName { if (name.removeColor() == "Stone") continue val size = itemStack.stackSize - val isBait = name.endsWith(" Bait") && size == 1 + val isBait = (name.removeColor().startsWith("Obfuscated") + || name.endsWith(" Bait")) && size == 1 val prefix = if (!isBait) { "§a§l+" } else { -- cgit From 9742360a3c1c9435692fb36febb565130e75e65e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 11:16:59 +0100 Subject: code cleanup and created ItemStack.isBait() --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +- .../skyhanni/config/features/FishingConfig.java | 2 +- .../skyhanni/features/fishing/BaitChangeWarning.kt | 89 ---------------------- .../skyhanni/features/fishing/FishingAPI.kt | 8 ++ .../features/fishing/FishingBaitWarnings.kt | 85 +++++++++++++++++++++ .../features/fishing/ShowFishingItemName.kt | 5 +- 6 files changed, 98 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 02d196cc3..78828fe8e 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -105,8 +105,8 @@ import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureT import at.hannibal2.skyhanni.features.event.spook.TheGreatSpook import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder import at.hannibal2.skyhanni.features.fame.CityProjectFeatures -import at.hannibal2.skyhanni.features.fishing.BaitChangeWarning import at.hannibal2.skyhanni.features.fishing.ChumBucketHider +import at.hannibal2.skyhanni.features.fishing.FishingBaitWarnings import at.hannibal2.skyhanni.features.fishing.FishingHookDisplay import at.hannibal2.skyhanni.features.fishing.FishingTimer import at.hannibal2.skyhanni.features.fishing.SeaCreatureFeatures @@ -622,7 +622,7 @@ class SkyHanniMod { loadModule(LockMouseLook) loadModule(DungeonFinderFeatures()) loadModule(PabloHelper()) - loadModule(BaitChangeWarning()); + loadModule(FishingBaitWarnings()); init() diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java index 235b606f8..11a21d083 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/FishingConfig.java @@ -236,7 +236,7 @@ public class FishingConfig { @Expose @ConfigOption(name = "Bait Warnings", desc = "") @Accordion - public FishingBaitWarningsConfig fishingBaitWarning = new FishingBaitWarningsConfig(); + public FishingBaitWarningsConfig fishingBaitWarnings = new FishingBaitWarningsConfig(); public static class FishingBaitWarningsConfig { @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt deleted file mode 100644 index 3f0487639..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/BaitChangeWarning.kt +++ /dev/null @@ -1,89 +0,0 @@ -package at.hannibal2.skyhanni.features.fishing - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent -import at.hannibal2.skyhanni.events.LorenzTickEvent -import at.hannibal2.skyhanni.utils.EntityUtils -import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.SoundUtils -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.utils.getLorenzVec -import at.hannibal2.skyhanni.utils.toLorenzVec -import net.minecraft.client.Minecraft -import net.minecraft.entity.item.EntityItem -import net.minecraft.entity.projectile.EntityFishHook -import net.minecraftforge.event.entity.EntityJoinWorldEvent -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import kotlin.time.Duration.Companion.seconds - -class BaitChangeWarning { - private val config get() = SkyHanniMod.feature.fishing.fishingBaitWarning - private var bobber: EntityFishHook? = null - private var lastBait: String? = null - private var timeLastCast: Long = 0L - private var isUsingBait: Boolean = false - - @SubscribeEvent - fun onJoinWorld(event: EntityJoinWorldEvent){ - if(!isEnabled()) return - val entity = event.entity ?: return - if(entity !is EntityFishHook) return - if(entity.angler != Minecraft.getMinecraft().thePlayer) return - - bobber = entity; - timeLastCast = System.currentTimeMillis() - isUsingBait = false - } - - @SubscribeEvent - fun onTick(event: LorenzTickEvent){ - if(!isEnabled() || bobber == null) return - //Is there a way to get event sent time to be more accurate? - if(System.currentTimeMillis() - timeLastCast < 1000L) return - - if(!isUsingBait && config.noBaitWarning) showNoBaitWarning() - reset() - } - - fun reset(){ - bobber = null - isUsingBait = false - } - - @SubscribeEvent - fun onRenderWorld(event: LorenzRenderWorldEvent){ - if(!isEnabled() || !config.baitChangeWarning) return - if(bobber == null) return - for(entityItem in EntityUtils.getEntitiesNearby(bobber!!.getLorenzVec(), 1.5)){ - val itemStack = entityItem.entityItem - var name = itemStack.name ?: continue - name = name.removeColor() - - if((!name.endsWith(" Bait") && !name.startsWith("Obfuscated")) - || itemStack.stackSize != 1) continue - - isUsingBait = true - if(lastBait == null){ - lastBait = name.removeColor() - continue - } - if(name.removeColor() == lastBait) continue - showBaitChangeWarning(lastBait!!, name.removeColor()) - lastBait = name.removeColor() - } - } - - fun showBaitChangeWarning(before: String, after: String){ - SoundUtils.playClickSound() - LorenzUtils.sendTitle("§eBait changed!", 2.seconds) - LorenzUtils.chat("§e" + before + " -> " + after) - } - - fun showNoBaitWarning(){ - SoundUtils.playErrorSound() - LorenzUtils.sendTitle("§cNo bait is used!", 2.seconds) - } - - private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.hasFishingRodInHand() -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index bfe3cb5bb..ccadaec94 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -1,7 +1,15 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.item.ItemStack object FishingAPI { fun hasFishingRodInHand() = InventoryUtils.itemInHandId.asString().contains("ROD") + + fun ItemStack.isBait(): Boolean { + val name = name ?: return false + return stackSize == 1 && (name.removeColor().startsWith("Obfuscated") || name.endsWith(" Bait")) + } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt new file mode 100644 index 000000000..3be74ea8a --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt @@ -0,0 +1,85 @@ +package at.hannibal2.skyhanni.features.fishing + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.features.fishing.FishingAPI.isBait +import at.hannibal2.skyhanni.utils.EntityUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.SoundUtils +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.getLorenzVec +import net.minecraft.client.Minecraft +import net.minecraft.entity.item.EntityItem +import net.minecraft.entity.projectile.EntityFishHook +import net.minecraftforge.event.entity.EntityJoinWorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds + +class FishingBaitWarnings { + private val config get() = SkyHanniMod.feature.fishing.fishingBaitWarnings + private var bobber: EntityFishHook? = null + private var lastBait: String? = null + private var timeLastCast = SimpleTimeMark.farPast() + private var isUsingBait: Boolean = false + + @SubscribeEvent + fun onJoinWorld(event: EntityJoinWorldEvent) { + if (!isEnabled()) return + val entity = event.entity ?: return + if (entity !is EntityFishHook) return + if (entity.angler != Minecraft.getMinecraft().thePlayer) return + + bobber = entity + timeLastCast = SimpleTimeMark.now() + isUsingBait = false + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!isEnabled() || bobber == null) return + //Is there a way to get event sent time to be more accurate? + if (timeLastCast.passedSince() < 1.seconds) return + + if (!isUsingBait && config.noBaitWarning) showNoBaitWarning() + reset() + } + + fun reset() { + bobber = null + isUsingBait = false + } + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + if (!isEnabled() || !config.baitChangeWarning) return + val bobber = bobber ?: return + for (entityItem in EntityUtils.getEntitiesNearby(bobber.getLorenzVec(), 1.5)) { + val itemStack = entityItem.entityItem + if (!itemStack.isBait()) continue + val name = itemStack.name?.removeColor() ?: continue + + isUsingBait = true + lastBait?.let { + if (name == it) continue + showBaitChangeWarning(it, name) + } + lastBait = name + } + } + + private fun showBaitChangeWarning(before: String, after: String) { + SoundUtils.playClickSound() + LorenzUtils.sendTitle("§eBait changed!", 2.seconds) + LorenzUtils.chat("§e[SkyHanni] Fishing Bait change detected: $before -> $after") + } + + private fun showNoBaitWarning() { + SoundUtils.playErrorSound() + LorenzUtils.sendTitle("§cNo bait is used!", 2.seconds) + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.hasFishingRodInHand() +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt index 99fcca5e4..a64d3da77 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.features.fishing.FishingAPI.isBait import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.name @@ -55,9 +56,7 @@ class ShowFishingItemName { if (name.removeColor() == "Stone") continue val size = itemStack.stackSize - val isBait = (name.removeColor().startsWith("Obfuscated") - || name.endsWith(" Bait")) && size == 1 - val prefix = if (!isBait) { + val prefix = if (!itemStack.isBait()) { "§a§l+" } else { if (!config.showBaits) continue -- cgit From 55b8487233477aad0524568c3960ae74b80db347 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 11:51:52 +0100 Subject: Fixed bug that bobber not in water/lava will show "No bait is used" warning --- .../skyhanni/features/fishing/FishingAPI.kt | 9 +++++ .../features/fishing/FishingBaitWarnings.kt | 39 ++++++++++++++-------- .../skyhanni/features/fishing/SharkFishCounter.kt | 16 ++------- 3 files changed, 37 insertions(+), 27 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index ccadaec94..70bd0ea9b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -1,15 +1,24 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.init.Blocks import net.minecraft.item.ItemStack object FishingAPI { + private val lavaBlocks = listOf(Blocks.lava, Blocks.flowing_lava) + private val waterBlocks = listOf(Blocks.water, Blocks.flowing_water) + fun hasFishingRodInHand() = InventoryUtils.itemInHandId.asString().contains("ROD") fun ItemStack.isBait(): Boolean { val name = name ?: return false return stackSize == 1 && (name.removeColor().startsWith("Obfuscated") || name.endsWith(" Bait")) } + + fun isLavaRod() = InventoryUtils.getItemInHand()?.getLore()?.any { it.contains("Lava Rod") } ?: false + + fun getAllowedBlocks() = if (isLavaRod()) lavaBlocks else waterBlocks } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt index 3be74ea8a..03e3e393b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.features.fishing.FishingAPI.isBait +import at.hannibal2.skyhanni.utils.BlockUtils.getBlockAt import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils @@ -14,6 +15,7 @@ import at.hannibal2.skyhanni.utils.getLorenzVec import net.minecraft.client.Minecraft import net.minecraft.entity.item.EntityItem import net.minecraft.entity.projectile.EntityFishHook +import net.minecraft.item.ItemStack import net.minecraftforge.event.entity.EntityJoinWorldEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds @@ -39,10 +41,18 @@ class FishingBaitWarnings { @SubscribeEvent fun onTick(event: LorenzTickEvent) { - if (!isEnabled() || bobber == null) return - //Is there a way to get event sent time to be more accurate? + if (!isEnabled()) return + val bobber = bobber ?: return + if (bobber.isDead) { + this.bobber = null + return + } + if (!event.isMod(5)) return if (timeLastCast.passedSince() < 1.seconds) return + val block = bobber.getLorenzVec().getBlockAt() + if (block in FishingAPI.getAllowedBlocks()) return + if (!isUsingBait && config.noBaitWarning) showNoBaitWarning() reset() } @@ -56,29 +66,32 @@ class FishingBaitWarnings { fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled() || !config.baitChangeWarning) return val bobber = bobber ?: return - for (entityItem in EntityUtils.getEntitiesNearby(bobber.getLorenzVec(), 1.5)) { - val itemStack = entityItem.entityItem - if (!itemStack.isBait()) continue - val name = itemStack.name?.removeColor() ?: continue + EntityUtils.getEntitiesNearby(bobber.getLorenzVec(), 1.5) + .forEach { onBaitDetection(it.entityItem) } + } + + private fun onBaitDetection(itemStack: ItemStack) { + if (!itemStack.isBait()) return + val name = itemStack.name?.removeColor() ?: return - isUsingBait = true - lastBait?.let { - if (name == it) continue - showBaitChangeWarning(it, name) - } - lastBait = name + isUsingBait = true + lastBait?.let { + if (name == it) return + showBaitChangeWarning(it, name) } + lastBait = name } private fun showBaitChangeWarning(before: String, after: String) { SoundUtils.playClickSound() LorenzUtils.sendTitle("§eBait changed!", 2.seconds) - LorenzUtils.chat("§e[SkyHanni] Fishing Bait change detected: $before -> $after") + LorenzUtils.chat("§e[SkyHanni] Fishing Bait changed: $before -> $after") } private fun showNoBaitWarning() { SoundUtils.playErrorSound() LorenzUtils.sendTitle("§cNo bait is used!", 2.seconds) + LorenzUtils.chat("§e[SkyHanni] You do not use any fishing baits!") } private fun isEnabled() = LorenzUtils.inSkyBlock && FishingAPI.hasFishingRodInHand() diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/SharkFishCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/SharkFishCounter.kt index c592e72a4..8861f0663 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/SharkFishCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/SharkFishCounter.kt @@ -5,9 +5,6 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.SeaCreatureFishEvent -import at.hannibal2.skyhanni.utils.InventoryUtils -import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderString @@ -56,16 +53,7 @@ class SharkFishCounter { } } - private fun isWaterFishingRod(): Boolean { - val heldItem = InventoryUtils.getItemInHand() ?: return false - val isRod = heldItem.name?.contains("Rod") ?: return false - if (!isRod) return false - - val isLavaRod = heldItem.getLore().any { it.contains("Lava Rod") } - if (isLavaRod) return false - - return true - } + private fun isWaterFishingRod() = FishingAPI.hasFishingRodInHand() && !FishingAPI.isLavaRod() @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { @@ -75,4 +63,4 @@ class SharkFishCounter { SkyHanniMod.feature.fishing.sharkFishCounterPos.renderString(display, posLabel = "Shark Fish Counter") } -} \ No newline at end of file +} -- cgit From 916a1be6d4e2fb4ba900c2a01504fb57f2714edf Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sun, 5 Nov 2023 21:54:24 +1100 Subject: Neu version change (#686) Changed wrong/missing neu version message to show NEU version 2.1.1-Pre-4 instead of beta versions. #686 --- .../at/hannibal2/skyhanni/utils/NEUVersionCheck.kt | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt index a1a35b9d8..f05f4bd0b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt @@ -19,12 +19,10 @@ object NEUVersionCheck { } catch (e: Throwable) { neuWarning( "NotEnoughUpdates is missing!\n" + - "SkyHanni requires the latest version of NotEnoughUpdates to work.\n" + - "You currently need NEU version 2.1.1-Alpha-19 or later.\n" + - "NEU 2.1 is NOT the latest version.\n" + - "It is ONLY in the #neu-alphas channel in the NEU discord\n" + - "Or in the #neu-updates channel in the SkyHanni discord\n" + - "Use these links to download the latest version:" + "SkyHanni requires the latest version of NotEnoughUpdates to work.\n" + + "You currently need NEU version 2.1.1-Pre-4 or later.\n" + + "NEU 2.1 is NOT the latest version.\n" + + "Use these links to download the latest version:" ) return } @@ -39,12 +37,9 @@ object NEUVersionCheck { } neuWarning( "NotEnoughUpdates is outdated!\n" + - "You currently need NEU version 2.1.1-Alpha-19 or later.\n\n" + - "NEU 2.1 is NOT the latest version.\n\n" + - "NEU 2.1.1 is NOT on the NEU GitHub.\n\n" + - "It is ONLY in the #neu-alphas channel in the NEU discord\n" + - "Or in the #neu-updates channel in the SkyHanni discord\n" + - "Use these links to download the latest version:" + "You currently need NEU version 2.1.1-Pre-4 or later.\n" + + "NEU 2.1 is NOT the latest version.\n" + + "Use these links to download the latest version:" ) } @@ -54,6 +49,7 @@ object NEUVersionCheck { Pair("Join SkyHanni Discord", "https://discord.com/invite/skyhanni-997079228510117908"), Pair("Open SkyHanni GitHub", "https://github.com/hannibal002/SkyHanni"), Pair("Join NEU Discord", "https://discord.gg/moulberry"), + Pair("Download Pre-4", "https://github.com/NotEnoughUpdates/NotEnoughUpdates/releases/tag/v2.1.1-pre4"), ) closeMinecraft() } @@ -117,4 +113,4 @@ object NEUVersionCheck { FMLCommonHandler.instance().handleExit(-1) FMLCommonHandler.instance().expectServerStopped() } -} \ No newline at end of file +} -- cgit From 14e72eb0fe2c542b014c9dcd70711ce18150445a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 12:32:30 +0100 Subject: creating FishingBobberCastEvent and removing code duplication --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +++- .../skyhanni/events/FishingBobberCastEvent.kt | 5 +++++ .../skyhanni/features/fishing/FishingAPI.kt | 21 +++++++++++++++++++ .../features/fishing/FishingBaitWarnings.kt | 19 +++++------------ .../features/fishing/FishingHookDisplay.kt | 24 +++++++--------------- 5 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/events/FishingBobberCastEvent.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 78828fe8e..fb75e37b5 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -106,6 +106,7 @@ import at.hannibal2.skyhanni.features.event.spook.TheGreatSpook import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder import at.hannibal2.skyhanni.features.fame.CityProjectFeatures import at.hannibal2.skyhanni.features.fishing.ChumBucketHider +import at.hannibal2.skyhanni.features.fishing.FishingAPI import at.hannibal2.skyhanni.features.fishing.FishingBaitWarnings import at.hannibal2.skyhanni.features.fishing.FishingHookDisplay import at.hannibal2.skyhanni.features.fishing.FishingTimer @@ -388,6 +389,7 @@ class SkyHanniMod { loadModule(RiftAPI) loadModule(SackAPI) loadModule(BingoAPI) + loadModule(FishingAPI) // features loadModule(BazaarOrderHelper()) @@ -622,7 +624,7 @@ class SkyHanniMod { loadModule(LockMouseLook) loadModule(DungeonFinderFeatures()) loadModule(PabloHelper()) - loadModule(FishingBaitWarnings()); + loadModule(FishingBaitWarnings()) init() diff --git a/src/main/java/at/hannibal2/skyhanni/events/FishingBobberCastEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/FishingBobberCastEvent.kt new file mode 100644 index 000000000..01ea0222e --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/events/FishingBobberCastEvent.kt @@ -0,0 +1,5 @@ +package at.hannibal2.skyhanni.events + +import net.minecraft.entity.projectile.EntityFishHook + +class FishingBobberCastEvent(val bobber: EntityFishHook) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt index 70bd0ea9b..550388893 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingAPI.kt @@ -1,16 +1,36 @@ package at.hannibal2.skyhanni.features.fishing +import at.hannibal2.skyhanni.events.FishingBobberCastEvent import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.client.Minecraft +import net.minecraft.entity.projectile.EntityFishHook import net.minecraft.init.Blocks import net.minecraft.item.ItemStack +import net.minecraftforge.event.entity.EntityJoinWorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object FishingAPI { private val lavaBlocks = listOf(Blocks.lava, Blocks.flowing_lava) private val waterBlocks = listOf(Blocks.water, Blocks.flowing_water) + var lastCastTime = SimpleTimeMark.farPast() + + @SubscribeEvent + fun onJoinWorld(event: EntityJoinWorldEvent) { + if (!LorenzUtils.inSkyBlock || !hasFishingRodInHand()) return + val entity = event.entity ?: return + if (entity !is EntityFishHook) return + if (entity.angler != Minecraft.getMinecraft().thePlayer) return + + lastCastTime = SimpleTimeMark.now() + FishingBobberCastEvent(entity).postAndCatch() + } + fun hasFishingRodInHand() = InventoryUtils.itemInHandId.asString().contains("ROD") fun ItemStack.isBait(): Boolean { @@ -21,4 +41,5 @@ object FishingAPI { fun isLavaRod() = InventoryUtils.getItemInHand()?.getLore()?.any { it.contains("Lava Rod") } ?: false fun getAllowedBlocks() = if (isLavaRod()) lavaBlocks else waterBlocks + } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt index 03e3e393b..8caf8cb20 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingBaitWarnings.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.FishingBobberCastEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.features.fishing.FishingAPI.isBait @@ -8,15 +9,12 @@ import at.hannibal2.skyhanni.utils.BlockUtils.getBlockAt import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.getLorenzVec -import net.minecraft.client.Minecraft import net.minecraft.entity.item.EntityItem import net.minecraft.entity.projectile.EntityFishHook import net.minecraft.item.ItemStack -import net.minecraftforge.event.entity.EntityJoinWorldEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds @@ -24,18 +22,11 @@ class FishingBaitWarnings { private val config get() = SkyHanniMod.feature.fishing.fishingBaitWarnings private var bobber: EntityFishHook? = null private var lastBait: String? = null - private var timeLastCast = SimpleTimeMark.farPast() private var isUsingBait: Boolean = false @SubscribeEvent - fun onJoinWorld(event: EntityJoinWorldEvent) { - if (!isEnabled()) return - val entity = event.entity ?: return - if (entity !is EntityFishHook) return - if (entity.angler != Minecraft.getMinecraft().thePlayer) return - - bobber = entity - timeLastCast = SimpleTimeMark.now() + fun onBobberThrow(event: FishingBobberCastEvent) { + bobber = event.bobber isUsingBait = false } @@ -48,10 +39,10 @@ class FishingBaitWarnings { return } if (!event.isMod(5)) return - if (timeLastCast.passedSince() < 1.seconds) return + if (FishingAPI.lastCastTime.passedSince() < 1.seconds) return val block = bobber.getLorenzVec().getBlockAt() - if (block in FishingAPI.getAllowedBlocks()) return + if (block !in FishingAPI.getAllowedBlocks()) return if (!isUsingBait && config.noBaitWarning) showNoBaitWarning() reset() diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt index c05ffcc80..be076222f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/FishingHookDisplay.kt @@ -2,30 +2,30 @@ package at.hannibal2.skyhanni.features.fishing import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.CheckRenderEntityEvent +import at.hannibal2.skyhanni.events.FishingBobberCastEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent -import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RenderUtils.renderString -import net.minecraft.client.entity.EntityPlayerSP import net.minecraft.entity.item.EntityArmorStand -import net.minecraft.entity.projectile.EntityFishHook import net.minecraftforge.event.entity.EntityJoinWorldEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class FishingHookDisplay { private val config get() = SkyHanniMod.feature.fishing.fishingHookDisplay - private var bobber: EntityFishHook? = null private var armorStand: EntityArmorStand? = null private val potentionArmorStands = mutableListOf() private val pattern = "§e§l(\\d+(\\.\\d+)?)".toPattern() @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { - bobber = null - armorStand = null - potentionArmorStands.clear() + reset() + } + + @SubscribeEvent + fun onBobberThrow(event: FishingBobberCastEvent) { + reset() } @SubscribeEvent @@ -38,16 +38,6 @@ class FishingHookDisplay { armorStand = filter[0] } } - - if (event.isMod(5)) { - val entities = EntityUtils.getEntities() - val foundBobber = entities.firstOrNull { it.angler is EntityPlayerSP } - if (foundBobber != bobber) { - bobber = foundBobber - reset() - } - } - } private fun reset() { -- cgit From 7721be72deb7acb5e3f133482a51e1286f875c47 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 12:40:57 +0100 Subject: Resetting parts of the inventory for users with 7-month-old SkyHanni versions that want to migrate into the present. --- .../at/hannibal2/skyhanni/config/Features.java | 4 - .../skyhanni/config/features/OldHidden.java | 118 --------------------- .../hannibal2/skyhanni/data/ProfileStorageData.kt | 77 +------------- 3 files changed, 1 insertion(+), 198 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/features/OldHidden.java (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index f5916cda8..ce6e0f1b2 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -20,7 +20,6 @@ import at.hannibal2.skyhanni.config.features.MarkedPlayerConfig; import at.hannibal2.skyhanni.config.features.MiningConfig; import at.hannibal2.skyhanni.config.features.MinionsConfig; import at.hannibal2.skyhanni.config.features.MiscConfig; -import at.hannibal2.skyhanni.config.features.OldHidden; import at.hannibal2.skyhanni.config.features.RiftConfig; import at.hannibal2.skyhanni.config.features.SlayerConfig; import com.google.gson.annotations.Expose; @@ -144,9 +143,6 @@ public class Features extends Config { @Category(name = "Dev", desc = "Debug and test stuff. Developers are cool.") public DevConfig dev = new DevConfig(); - @Expose - public OldHidden hidden = new OldHidden(); - @Expose public Storage storage = new Storage(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/OldHidden.java b/src/main/java/at/hannibal2/skyhanni/config/features/OldHidden.java deleted file mode 100644 index a2694210f..000000000 --- a/src/main/java/at/hannibal2/skyhanni/config/features/OldHidden.java +++ /dev/null @@ -1,118 +0,0 @@ -package at.hannibal2.skyhanni.config.features; - -import at.hannibal2.skyhanni.data.model.ComposterUpgrade; -import at.hannibal2.skyhanni.features.garden.CropAccessory; -import at.hannibal2.skyhanni.features.garden.CropType; -import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops; -import at.hannibal2.skyhanni.features.garden.visitor.VisitorReward; -import com.google.gson.annotations.Expose; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class OldHidden { - - @Expose - public String currentPet = ""; - - @Expose - public Map minionLastClick = new HashMap<>(); - - @Expose - public Map minionName = new HashMap<>(); - - @Expose - public List crimsonIsleQuests = new ArrayList<>(); - - @Expose - public List crimsonIsleMiniBossesDoneToday = new ArrayList<>(); - - @Expose - public List crimsonIsleKuudraTiersDone = new ArrayList<>(); - - @Expose - public Map gardenCropCounter = new HashMap<>(); - - @Expose - public Map gardenCropUpgrades = new HashMap<>(); - - @Expose - public Map gardenCropsPerSecond = new HashMap<>(); - - @Expose - public Map gardenLatestBlocksPerSecond = new HashMap<>(); - - @Expose - public Map gardenLatestTrueFarmingFortune = new HashMap<>(); - - @Expose - public int gardenExp = -1; - - @Expose - public CropAccessory savedCropAccessory = null; - - @Expose - public Map gardenDicerRngDrops = new HashMap<>(); - - @Expose - public long informedAboutLowMatter = 0; - - @Expose - public long informedAboutLowFuel = 0; - - @Expose - public long visitorInterval = 15 * 60_000L; - - @Expose - public long nextSixthVisitorArrival = 0; - - @Expose - public Map> gardenJacobFarmingContestTimes = new HashMap<>(); - - @Expose - public Map gardenFarmingArmorDrops = new HashMap<>(); - - @Expose - public Map gardenComposterUpgrades = new HashMap<>(); - - @Expose - public Map gardenToolHasBountiful = new HashMap<>(); - - @Expose - public String gardenComposterCurrentOrganicMatterItem = ""; - - @Expose - public String gardenComposterCurrentFuelItem = ""; - - - @Expose - public VisitorDrops visitorDrops = new VisitorDrops(); - - public static class VisitorDrops { - @Expose - public int acceptedVisitors = 0; - - @Expose - public int deniedVisitors = 0; - - @Expose - public List visitorRarities = new ArrayList<>(); - - @Expose - public int copper = 0; - - @Expose - public long farmingExp = 0; - - @Expose - public long coinsSpent = 0; - - @Expose - public Map rewardsCount = new HashMap<>(); - } - - @Expose - public boolean isMigrated = false; -} diff --git a/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt b/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt index 63f77f2d2..d14372419 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt @@ -12,7 +12,6 @@ import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent import at.hannibal2.skyhanni.events.TabListUpdateEvent import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -115,7 +114,6 @@ object ProfileStorageData { noTabListTime = -1 profileSpecific = playerSpecific.profiles.getOrPut(profileName) { Storage.ProfileSpecific() } sackProfiles = sackProfile.profiles.getOrPut(profileName) { SackData.ProfileSpecific() } - tryMigrateProfileSpecific() loaded = true ConfigLoadEvent().postAndCatch() } @@ -125,79 +123,6 @@ object ProfileStorageData { val playerUuid = LorenzUtils.getRawPlayerUuid() playerSpecific = SkyHanniMod.feature.storage.players.getOrPut(playerUuid) { Storage.PlayerSpecific() } sackPlayers = SkyHanniMod.sackData.players.getOrPut(playerUuid) { SackData.PlayerSpecific() } - migratePlayerSpecific() ConfigLoadEvent().postAndCatch() } - - private fun migratePlayerSpecific() { - val oldHidden = SkyHanniMod.feature.hidden - if (oldHidden.isMigrated) return - - SkyHanniMod.feature.storage?.let { - it.gardenJacobFarmingContestTimes = oldHidden.gardenJacobFarmingContestTimes - } - } - - private fun tryMigrateProfileSpecific() { - val oldHidden = SkyHanniMod.feature.hidden - if (oldHidden.isMigrated) return - - profileSpecific?.let { - it.currentPet = oldHidden.currentPet - - for ((rawLocation, minionName) in oldHidden.minionName) { - val lastClick = oldHidden.minionLastClick[rawLocation] ?: -1 - val location = LorenzVec.decodeFromString(rawLocation) - val minionConfig = Storage.ProfileSpecific.MinionConfig() - minionConfig.displayName = minionName - minionConfig.lastClicked = lastClick - it.minions[location] = minionConfig - } - } - - profileSpecific?.crimsonIsle?.let { - it.quests = oldHidden.crimsonIsleQuests - it.miniBossesDoneToday = oldHidden.crimsonIsleMiniBossesDoneToday - it.kuudraTiersDone = oldHidden.crimsonIsleKuudraTiersDone - } - - profileSpecific?.garden?.let { - it.experience = oldHidden.gardenExp.toLong() - it.cropCounter = oldHidden.gardenCropCounter - it.cropUpgrades = oldHidden.gardenCropUpgrades - - for ((crop, speed) in oldHidden.gardenCropsPerSecond) { - if (speed != -1) { - it.cropsPerSecond[crop] = speed - } - } - - it.latestBlocksPerSecond = oldHidden.gardenLatestBlocksPerSecond - it.latestTrueFarmingFortune = oldHidden.gardenLatestTrueFarmingFortune - it.savedCropAccessory = oldHidden.savedCropAccessory - it.dicerRngDrops = oldHidden.gardenDicerRngDrops - it.informedAboutLowMatter = oldHidden.informedAboutLowMatter - it.informedAboutLowFuel = oldHidden.informedAboutLowFuel - it.visitorInterval = oldHidden.visitorInterval - it.nextSixthVisitorArrival = oldHidden.nextSixthVisitorArrival - it.farmArmorDrops = oldHidden.gardenFarmingArmorDrops - it.composterUpgrades = oldHidden.gardenComposterUpgrades - it.toolWithBountiful = oldHidden.gardenToolHasBountiful - it.composterCurrentOrganicMatterItem = oldHidden.gardenComposterCurrentOrganicMatterItem - it.composterCurrentFuelItem = oldHidden.gardenComposterCurrentFuelItem - } - - profileSpecific?.garden?.visitorDrops?.let { - val old = oldHidden.visitorDrops - it.acceptedVisitors = old.acceptedVisitors - it.deniedVisitors = old.deniedVisitors - it.visitorRarities = old.visitorRarities - it.copper = old.copper - it.farmingExp = old.farmingExp - it.coinsSpent = old.coinsSpent - it.rewardsCount = old.rewardsCount - } - - oldHidden.isMigrated = true - } -} \ No newline at end of file +} -- cgit From 31c2e93d5cfd21c8a2a6ce68ea13c7d9256c5af6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 12:43:02 +0100 Subject: code cleanup --- .../java/at/hannibal2/skyhanni/config/Features.java | 4 ++-- .../at/hannibal2/skyhanni/data/ProfileStorageData.kt | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index ce6e0f1b2..9ae08f094 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -44,8 +44,8 @@ public class Features extends Config { @Override public List getSocials() { return Arrays.asList( - Social.forLink("Join our Discord", DISCORD, "https://discord.com/invite/skyhanni-997079228510117908"), - Social.forLink("Look at the code", GITHUB, "https://github.com/hannibal002/SkyHanni") + Social.forLink("Join our Discord", DISCORD, "https://discord.com/invite/skyhanni-997079228510117908"), + Social.forLink("Look at the code", GITHUB, "https://github.com/hannibal002/SkyHanni") ); } diff --git a/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt b/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt index d14372419..a8770e1f2 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ProfileStorageData.kt @@ -24,14 +24,15 @@ object ProfileStorageData { private var nextProfile: String? = null + // TODO USE SH-REPO + private val profileSwitchPattern = "§7Switching to profile (?.*)\\.\\.\\.".toPattern() private var sackPlayers: SackData.PlayerSpecific? = null var sackProfiles: SackData.ProfileSpecific? = null @SubscribeEvent(priority = EventPriority.HIGHEST) fun onChat(event: LorenzChatEvent) { - // TODO USE SH-REPO - "§7Switching to profile (?.*)\\.\\.\\.".toPattern().matchMatcher(event.message) { + profileSwitchPattern.matchMatcher(event.message) { nextProfile = group("name").lowercase() loaded = false PreProfileSwitchEvent().postAndCatch() @@ -53,7 +54,7 @@ object ProfileStorageData { LorenzUtils.error("sackPlayers after profile swap can not be set: sackPlayers is null!") return } - loadProfileSpecific(playerSpecific, sackPlayers, profileName, "profile swap (chat message)") + loadProfileSpecific(playerSpecific, sackPlayers, profileName) ConfigLoadEvent().postAndCatch() } @@ -72,7 +73,7 @@ object ProfileStorageData { if (profileSpecific == null) { val profileName = event.name - loadProfileSpecific(playerSpecific, sackPlayers, profileName, "first join (chat message)") + loadProfileSpecific(playerSpecific, sackPlayers, profileName) } } @@ -85,7 +86,7 @@ object ProfileStorageData { val pattern = "§e§lProfile: §r§a(?.*)".toPattern() pattern.matchMatcher(line) { val profileName = group("name").lowercase() - loadProfileSpecific(playerSpecific, sackPlayers, profileName, "tab list") + loadProfileSpecific(playerSpecific, sackPlayers, profileName) nextProfile = null return } @@ -105,12 +106,16 @@ object ProfileStorageData { noTabListTime = System.currentTimeMillis() LorenzUtils.chat( "§c[SkyHanni] Extra Information from Tab list not found! " + - "Enable it: SkyBlock Menu ➜ Settings ➜ Personal ➜ User Interface ➜ Player List Info" + "Enable it: SkyBlock Menu ➜ Settings ➜ Personal ➜ User Interface ➜ Player List Info" ) } } - private fun loadProfileSpecific(playerSpecific: Storage.PlayerSpecific, sackProfile: SackData.PlayerSpecific, profileName: String, reason: String) { + private fun loadProfileSpecific( + playerSpecific: Storage.PlayerSpecific, + sackProfile: SackData.PlayerSpecific, + profileName: String + ) { noTabListTime = -1 profileSpecific = playerSpecific.profiles.getOrPut(profileName) { Storage.ProfileSpecific() } sackProfiles = sackProfile.profiles.getOrPut(profileName) { SackData.ProfileSpecific() } -- cgit From e137bf8d451e41ffab921080d065ebd7707644ad Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:11:42 +0100 Subject: moved calculation into EstimatedItemValueCalculator --- .../skyhanni/features/inventory/ChestValue.kt | 3 +- .../features/misc/items/EstimatedItemValue.kt | 667 +------------------- .../misc/items/EstimatedItemValueCalculator.kt | 675 +++++++++++++++++++++ .../features/misc/items/EstimatedWardrobePrice.kt | 6 +- 4 files changed, 682 insertions(+), 669 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt index b7b8ae7f6..6f7eda6b6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt @@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryOpenEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.features.misc.items.EstimatedItemValue +import at.hannibal2.skyhanni.features.misc.items.EstimatedItemValueCalculator import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull import at.hannibal2.skyhanni.utils.LorenzUtils @@ -190,7 +191,7 @@ class ChestValue { val internalName = stack.getInternalNameOrNull() ?: continue if (internalName.getItemStackOrNull() == null) continue val list = mutableListOf() - val pair = EstimatedItemValue.getEstimatedItemPrice(stack, list) + val pair = EstimatedItemValueCalculator.calculate(stack, list) var (total, _) = pair val key = "$internalName+$total" if (stack.item == Items.enchanted_book) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index 7dfd5656a..05b61aa65 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -7,72 +7,26 @@ import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.RenderItemTooltipEvent -import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull -import at.hannibal2.skyhanni.utils.ItemUtils.getItemName -import at.hannibal2.skyhanni.utils.ItemUtils.getItemNameOrNull -import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull -import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld -import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.onToggle -import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull -import at.hannibal2.skyhanni.utils.NEUItems.getPrice -import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.manager import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.GemstoneSlotType -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAbilityScrolls -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getArmorDye -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAttributes -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDrillUpgrades -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDungeonStarCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnrichment -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getExtraAttributes -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFarmingForDummiesCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getGemstones -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHelmetSkin -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHotPotatoCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getManaDisintegrators -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getPolarvoidBookCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getPowerScroll -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getRune -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getSilexCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getTransmissionTunerCount -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasArtOfPeace -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasArtOfWar -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasBookOfStats -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasEtherwarp -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasJalapenoBook -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasWoodSingularity -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRecombobulated -import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken import io.github.moulberry.notenoughupdates.events.RepositoryReloadEvent import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer -import io.github.moulberry.notenoughupdates.recipes.Ingredient -import io.github.moulberry.notenoughupdates.util.Constants import net.minecraft.client.Minecraft import net.minecraft.init.Items import net.minecraft.item.ItemStack import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.io.File -import java.util.Locale import kotlin.math.roundToLong object EstimatedItemValue { @@ -80,7 +34,7 @@ object EstimatedItemValue { private var display = emptyList>() private val cache = mutableMapOf>>() private var lastToolTipTime = 0L - private var gemstoneUnlockCosts = HashMap>>() + var gemstoneUnlockCosts = HashMap>>() var currentlyShowing = false @SubscribeEvent @@ -196,7 +150,7 @@ object EstimatedItemValue { val list = mutableListOf() list.add("§aEstimated Item Value:") - val pair = getEstimatedItemPrice(stack, list) + val pair = EstimatedItemValueCalculator.calculate(stack, list) val (totalPrice, basePrice) = pair if (basePrice == totalPrice) return listOf() @@ -215,623 +169,6 @@ object EstimatedItemValue { return newDisplay } - fun getEstimatedItemPrice(stack: ItemStack, list: MutableList): Pair { - var totalPrice = 0.0 - val basePrice = addBaseItem(stack, list) - totalPrice += basePrice - - totalPrice += addAttributeCost(stack, list) - - totalPrice += addReforgeStone(stack, list) - - // once - totalPrice += addRecomb(stack, list) - totalPrice += addArtOfWar(stack, list) - totalPrice += addArtOfPiece(stack, list) - totalPrice += addEtherwarp(stack, list) - totalPrice += addPowerScrolls(stack, list) - totalPrice += addWoodSingularity(stack, list) - totalPrice += addJalapenoBook(stack, list) - totalPrice += addStatsBook(stack, list) - totalPrice += addEnrichment(stack, list) - - // counted - totalPrice += addMasterStars(stack, list) - totalPrice += addHotPotatoBooks(stack, list) - totalPrice += addFarmingForDummies(stack, list) - totalPrice += addSilex(stack, list) - totalPrice += addTransmissionTuners(stack, list) - totalPrice += addManaDisintegrators(stack, list) - totalPrice += addPolarvoidBook(stack, list) - - // cosmetic - totalPrice += addHelmetSkin(stack, list) - totalPrice += addArmorDye(stack, list) - totalPrice += addRune(stack, list) - - // dynamic - totalPrice += addAbilityScrolls(stack, list) - totalPrice += addDrillUpgrades(stack, list) - totalPrice += addGemstoneSlotUnlockCost(stack, list) - totalPrice += addGemstones(stack, list) - totalPrice += addEnchantments(stack, list) - return Pair(totalPrice, basePrice) - } - - private fun addAttributeCost(stack: ItemStack, list: MutableList): Double { - val attributes = stack.getAttributes() ?: return 0.0 - var internalName = stack.getInternalName().asString().removePrefix("VANQUISHED_") - val kuudraSets = listOf("AURORA", "CRIMSON", "TERROR", "HOLLOW") - var genericName = internalName - if (kuudraSets.any { internalName.contains(it) } - && listOf("CHESTPLATE", "LEGGINGS", "HELMET", "BOOTS").any { internalName.endsWith(it) }) { - for (prefix in listOf("HOT_", "BURNING_", "FIERY_", "INFERNAL_")) { - internalName = internalName.removePrefix(prefix) - } - genericName = kuudraSets.fold(internalName) { acc, part -> acc.replace(part, "GENERIC_KUUDRA") } - } - if (internalName == "ATTRIBUTE_SHARD" && attributes.size == 1) { - val price = - getPriceOrCompositePriceForAttribute( - "ATTRIBUTE_SHARD+ATTRIBUTE_" + attributes[0].first, - attributes[0].second - ) - if (price != null) { - list.add( - "§7Attribute §9${ - attributes[0].first.fixMending().split("_").joinToString(" ") { it.firstLetterUppercase() } - } ${attributes[0].second}§7: (§6${NumberUtil.format(price)}§7)" - ) - return price - } - } - if (attributes.size != 2) return 0.0 - val basePrice = internalName.asInternalName().getPriceOrNull() ?: 0.0 - var subTotal = 0.0 - val combo = ("$internalName+ATTRIBUTE_${attributes[0].first}+ATTRIBUTE_${attributes[1].first}").asInternalName() - val comboPrice = combo.getPriceOrNull() - if (comboPrice != null && comboPrice > basePrice) { - list.add("§7Attribute Combo: (§6${NumberUtil.format(comboPrice)}§7)") - subTotal += comboPrice - basePrice - } else { - list.add("§7Attributes:") - } - for (attr in attributes) { - val price = - getPriceOrCompositePriceForAttribute("$genericName+ATTRIBUTE_${attr.first}", attr.second) - if (price != null) { - subTotal += price - } - val displayName = attr.first.fixMending() - list.add( - " §9${ - displayName.split("_").joinToString(" ") { it.firstLetterUppercase() } - } ${attr.second}§7: §6${if (price != null) NumberUtil.format(price) else "Unknown"}" - ) - } - return subTotal - } - - private fun String.fixMending() = if (this == "MENDING") "VITALITY" else this - - private fun getPriceOrCompositePriceForAttribute(attributeName: String, level: Int): Double? { - return (1..10).mapNotNull { lowerLevel -> - "$attributeName;$lowerLevel".asInternalName().getPriceOrNull() - ?.let { it / (1 shl lowerLevel) * (1 shl level).toDouble() } - }.minOrNull() - } - - private fun addReforgeStone(stack: ItemStack, list: MutableList): Double { - val rawReforgeName = stack.getReforgeName() ?: return 0.0 - - for ((rawInternalName, values) in Constants.REFORGESTONES.entrySet()) { - val stoneJson = values.asJsonObject - val reforgeName = stoneJson.get("reforgeName").asString - if (rawReforgeName == reforgeName.lowercase() || rawReforgeName == rawInternalName.lowercase()) { - val internalName = rawInternalName.asInternalName() - val reforgeStonePrice = internalName.getPrice() - val reforgeStoneName = internalName.getItemName() - - val reforgeCosts = stoneJson.get("reforgeCosts").asJsonObject - val applyCost = getReforgeStoneApplyCost(stack, reforgeCosts, internalName) ?: return 0.0 - - list.add("§7Reforge: §9$reforgeName") - list.add(" §7Stone $reforgeStoneName §7(§6" + NumberUtil.format(reforgeStonePrice) + "§7)") - list.add(" §7Apply cost: (§6" + NumberUtil.format(applyCost) + "§7)") - return reforgeStonePrice + applyCost - } - } - - return 0.0 - } - - private fun getReforgeStoneApplyCost( - stack: ItemStack, - reforgeCosts: JsonObject, - reforgeStone: NEUInternalName - ): Int? { - var itemRarity = stack.getItemRarityOrNull() ?: return null - - // Catch cases of special or very special - if (itemRarity > LorenzRarity.MYTHIC) { - itemRarity = LorenzRarity.LEGENDARY - } else { - if (stack.isRecombobulated()) { - val oneBelow = itemRarity.oneBelow() - if (oneBelow == null) { - ErrorManager.logErrorState( - "Wrong item rarity detected in estimated item value for item ${stack.name}", - "Recombobulated item is common: ${stack.getInternalName()}, name:${stack.name}" - ) - return null - } - itemRarity = oneBelow - } - } - val rarityName = itemRarity.name - if (!reforgeCosts.has(rarityName)) { - val reforgesFound = reforgeCosts.entrySet().map { it.key } - ErrorManager.logErrorState( - "Can not calculate reforge cost for item ${stack.name}", - "item rarity '$itemRarity' is not in NEU repo reforge cost for reforge stone$reforgeStone ($reforgesFound)" - ) - return null - } - - return reforgeCosts[rarityName].asInt - } - - private fun addRecomb(stack: ItemStack, list: MutableList): Double { - if (!stack.isRecombobulated()) return 0.0 - - val price = "RECOMBOBULATOR_3000".asInternalName().getPrice() - list.add("§7Recombobulated: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addJalapenoBook(stack: ItemStack, list: MutableList): Double { - if (!stack.hasJalapenoBook()) return 0.0 - - val price = "JALAPENO_BOOK".asInternalName().getPrice() - list.add("§7Jalapeno Book: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addEtherwarp(stack: ItemStack, list: MutableList): Double { - if (!stack.hasEtherwarp()) return 0.0 - - val wtfHardcodedConduit = "ETHERWARP_CONDUIT".asInternalName() - val wtfHardcodedMerger = "ETHERWARP_MERGER".asInternalName() - val price = wtfHardcodedConduit.getPrice() + wtfHardcodedMerger.getPrice() - list.add("§7Etherwarp: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addWoodSingularity(stack: ItemStack, list: MutableList): Double { - if (!stack.hasWoodSingularity()) return 0.0 - - val price = "WOOD_SINGULARITY".asInternalName().getPrice() - list.add("§7Wood Singularity: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addArtOfWar(stack: ItemStack, list: MutableList): Double { - if (!stack.hasArtOfWar()) return 0.0 - - val price = "THE_ART_OF_WAR".asInternalName().getPrice() - list.add("§7The Art of War: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addStatsBook(stack: ItemStack, list: MutableList): Double { - if (!stack.hasBookOfStats()) return 0.0 - - val price = "BOOK_OF_STATS".asInternalName().getPrice() - list.add("§7Book of Stats: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - // TODO untested - private fun addArtOfPiece(stack: ItemStack, list: MutableList): Double { - if (!stack.hasArtOfPeace()) return 0.0 - - val price = "THE_ART_OF_PEACE".asInternalName().getPrice() - list.add("§7The Art Of Piece: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addHotPotatoBooks(stack: ItemStack, list: MutableList): Double { - val count = stack.getHotPotatoCount() ?: return 0.0 - - val hpb: Int - val fuming: Int - if (count <= 10) { - hpb = count - fuming = 0 - } else { - hpb = 10 - fuming = count - 10 - } - - var totalPrice = 0.0 - - val wtfHardcodedHpb = "HOT_POTATO_BOOK".asInternalName() - val hpbPrice = wtfHardcodedHpb.getPrice() * hpb - list.add("§7HPB's: §e$hpb§7/§e10 §7(§6" + NumberUtil.format(hpbPrice) + "§7)") - totalPrice += hpbPrice - - if (fuming > 0) { - val wtfHardcodedFuming = "FUMING_POTATO_BOOK".asInternalName() - val fumingPrice = wtfHardcodedFuming.getPrice() * fuming - list.add("§7Fuming: §e$fuming§7/§e5 §7(§6" + NumberUtil.format(fumingPrice) + "§7)") - totalPrice += fumingPrice - } - - return totalPrice - } - - private fun addFarmingForDummies(stack: ItemStack, list: MutableList): Double { - val count = stack.getFarmingForDummiesCount() ?: return 0.0 - - val wtfHardcodedDumbFarmers = "FARMING_FOR_DUMMIES".asInternalName() - val price = wtfHardcodedDumbFarmers.getPrice() * count - list.add("§7Farming for Dummies: §e$count§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addPolarvoidBook(stack: ItemStack, list: MutableList): Double { - val count = stack.getPolarvoidBookCount() ?: return 0.0 - - val broDilloMiningSoBad = "POLARVOID_BOOK".asInternalName() - val price = broDilloMiningSoBad.getPrice() * count - list.add("§7Polarvoid: §e$count§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addSilex(stack: ItemStack, list: MutableList): Double { - val tier = stack.getSilexCount() ?: return 0.0 - - val internalName = stack.getInternalName() - val maxTier = if (internalName == "STONK_PICKAXE".asInternalName()) 4 else 5 - - val wtfHardcodedSilex = "SIL_EX".asInternalName() - val price = wtfHardcodedSilex.getPrice() * tier - list.add("§7Silex: §e$tier§7/§e$maxTier §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addTransmissionTuners(stack: ItemStack, list: MutableList): Double { - val count = stack.getTransmissionTunerCount() ?: return 0.0 - - val wtfHardcodedTuner = "TRANSMISSION_TUNER".asInternalName() - val price = wtfHardcodedTuner.getPrice() * count - list.add("§7Transmission Tuners: §e$count§7/§e4 §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addManaDisintegrators(stack: ItemStack, list: MutableList): Double { - val count = stack.getManaDisintegrators() ?: return 0.0 - - val wtfHardcodedTuner = "MANA_DISINTEGRATOR".asInternalName() - val price = wtfHardcodedTuner.getPrice() * count - list.add("§7Mana Disintegrators: §e$count§7/§e10 §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addMasterStars(stack: ItemStack, list: MutableList): Double { - val totalStars = stack.getDungeonStarCount() ?: return 0.0 - - val masterStars = totalStars - 5 - if (masterStars < 1) return 0.0 - - var price = 0.0 - - val stars = mapOf( - "FIRST" to 1, - "SECOND" to 2, - "THIRD" to 3, - "FOURTH" to 4, - "FIFTH" to 5, - ) - - for ((prefix, number) in stars) { - if (masterStars >= number) { - price += "${prefix}_MASTER_STAR".asInternalName().getPrice() - } - } - - list.add("§7Master Stars: §e$masterStars§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addDrillUpgrades(stack: ItemStack, list: MutableList): Double { - val drillUpgrades = stack.getDrillUpgrades() ?: return 0.0 - - var totalPrice = 0.0 - val map = mutableMapOf() - for (internalName in drillUpgrades) { - val name = internalName.getItemName() - val price = internalName.getPriceOrNull() ?: continue - - totalPrice += price - val format = NumberUtil.format(price) - map[" $name §7(§6$format§7)"] = price - } - if (map.isNotEmpty()) { - list.add("§7Drill upgrades: §6" + NumberUtil.format(totalPrice)) - list += map.sortedDesc().keys - } - return totalPrice - } - - private fun addPowerScrolls(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getPowerScroll() ?: return 0.0 - - val price = internalName.getPrice() - val name = internalName.getItemName().removeColor() - list.add("§7$name: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addHelmetSkin(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getHelmetSkin() ?: return 0.0 - - val price = internalName.getPrice() - val name = internalName.getNameOrRepoError() - val displayname = name ?: "§c${internalName.asString()}" - list.add("§7Skin: $displayname §7(§6" + NumberUtil.format(price) + "§7)") - if (name == null) { - list.add(" §8(Not yet in NEU Repo)") - } - return price - } - - private fun addArmorDye(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getArmorDye() ?: return 0.0 - - val price = internalName.getPrice() - val name = internalName.getNameOrRepoError() - val displayname = name ?: "§c${internalName.asString()}" - list.add("§7Dye: $displayname §7(§6" + NumberUtil.format(price) + "§7)") - if (name == null) { - list.add(" §8(Not yet in NEU Repo)") - } - return price - } - - private fun addEnrichment(stack: ItemStack, list: MutableList): Double { - - val enrichmentName = stack.getEnrichment() ?: return 0.0 - val internalName = "TALISMAN_ENRICHMENT_$enrichmentName".asInternalName() - - val price = internalName.getPrice() - val name = internalName.getItemName() - list.add("§7Enrichment: $name §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - private fun addRune(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getRune() ?: return 0.0 - - val price = internalName.getPrice() - val name = internalName.getItemNameOrNull() - val displayname = name ?: "§c${internalName.asString()}" - list.add("§7Rune: $displayname §7(§6" + NumberUtil.format(price) + "§7)") - if (name == null) { - list.add(" §8(Not yet in NEU Repo)") - } - return price - } - - private fun NEUInternalName.getNameOrRepoError(): String? { - val stack = getItemStackOrNull() ?: return null - return stack.nameWithEnchantment ?: "§cItem Name Error" - } - - private fun addAbilityScrolls(stack: ItemStack, list: MutableList): Double { - val abilityScrolls = stack.getAbilityScrolls() ?: return 0.0 - - var totalPrice = 0.0 - val map = mutableMapOf() - for (internalName in abilityScrolls) { - val name = internalName.getItemName() - val price = internalName.getPriceOrNull() ?: continue - - totalPrice += price - val format = NumberUtil.format(price) - map[" $name §7(§6$format§7)"] = price - } - if (map.isNotEmpty()) { - list.add("§7Ability Scrolls: §6" + NumberUtil.format(totalPrice)) - list += map.sortedDesc().keys - } - return totalPrice - } - - private fun addBaseItem(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getInternalName() - var price = internalName.getPrice() - if (price == -1.0) { - price = 0.0 - } - - val name = internalName.getItemName() - if (internalName.startsWith("ENCHANTED_BOOK_BUNDLE_")) { - list.add("§7Base item: $name") - return 0.0 - } - - list.add("§7Base item: $name §7(§6" + NumberUtil.format(price) + "§7)") - return price - } - - val hasAlwaysScavenger = listOf( - "CRYPT_DREADLORD_SWORD".asInternalName(), - "ZOMBIE_SOLDIER_CUTLASS".asInternalName(), - "CONJURING_SWORD".asInternalName(), - "EARTH_SHARD".asInternalName(), - "ZOMBIE_KNIGHT_SWORD".asInternalName(), - "SILENT_DEATH".asInternalName(), - "ZOMBIE_COMMANDER_WHIP".asInternalName(), - ) - - private fun addEnchantments(stack: ItemStack, list: MutableList): Double { - val enchantments = stack.getEnchantments() ?: return 0.0 - - var totalPrice = 0.0 - val map = mutableMapOf() - - val tieredEnchants = listOf("compact", "cultivating", "champion", "expertise", "hecatomb") - - val internalName = stack.getInternalName() - for ((rawName, rawLevel) in enchantments) { - // efficiency 1-5 is cheap, 6-10 is handled by silex - if (rawName == "efficiency") continue - - if (rawName == "scavenger" && rawLevel == 5 && internalName in hasAlwaysScavenger) { - continue - } - - var level = rawLevel - var multiplier = 1 - if (rawName == "ultimate_chimera" || rawName == "ultimate_fatal_tempo" || rawName == "smoldering") { - - when (rawLevel) { - 2 -> multiplier = 2 - 3 -> multiplier = 4 - 4 -> multiplier = 8 - 5 -> multiplier = 16 - } - level = 1 - - } - if (internalName.startsWith("ENCHANTED_BOOK_BUNDLE_")) { - multiplier = 5 - } - if (rawName in tieredEnchants) level = 1 - - val enchantmentName = "$rawName;$level".uppercase().asInternalName() - val itemStack = enchantmentName.getItemStackOrNull() ?: continue - val singlePrice = enchantmentName.getPriceOrNull() ?: continue - - var name = itemStack.getLore()[0] - if (multiplier > 1) { - name = "§8${multiplier}x $name" - } - val price = singlePrice * multiplier - - totalPrice += price - val format = NumberUtil.format(price) - - - map[" $name §7(§6$format§7)"] = price - } - val enchantmentsCap: Int = config.enchantmentsCap.get().toInt() - if (map.isNotEmpty()) { - list.add("§7Enchantments: §6" + NumberUtil.format(totalPrice)) - var i = 0 - for (entry in map.sortedDesc().keys) { - if (i == enchantmentsCap) { - val missing = map.size - enchantmentsCap - list.add(" §7§o$missing more enchantments..") - break - } - list.add(entry) - i++ - } - } - return totalPrice - } - - private fun addGemstones(stack: ItemStack, list: MutableList): Double { - val gemstones = stack.getGemstones() ?: return 0.0 - - var totalPrice = 0.0 - val counterMap = mutableMapOf() - for (gemstone in gemstones) { - val internalName = gemstone.getInternalName() - val old = counterMap[internalName] ?: 0 - counterMap[internalName] = old + 1 - } - - val priceMap = mutableMapOf() - for ((internalName, amount) in counterMap) { - - val name = internalName.getItemName() - val price = internalName.getPrice() * amount - - totalPrice += price - val format = NumberUtil.format(price) - - val text = if (amount == 1) { - " $name §7(§6$format§7)" - } else { - " §8${amount}x $name §7(§6$format§7)" - } - priceMap[text] = price - } - - if (priceMap.isNotEmpty()) { - list.add("§7Gemstones: §6" + NumberUtil.format(totalPrice)) - list += priceMap.sortedDesc().keys - } - return totalPrice - } - - private fun addGemstoneSlotUnlockCost(stack: ItemStack, list: MutableList): Double { - val internalName = stack.getInternalName() - - // item have to contains gems.unlocked_slots NBT array for unlocked slot detection - val unlockedSlots = - stack.getExtraAttributes()?.getCompoundTag("gems")?.getTag("unlocked_slots")?.toString() ?: return 0.0 - - // TODO detection for old items which doesnt have gems.unlocked_slots NBT array -// if (unlockedSlots == "null") return 0.0 - - val priceMap = mutableMapOf() - if (gemstoneUnlockCosts.isEmpty()) return 0.0 - - if (internalName !in gemstoneUnlockCosts) { - ErrorManager.logErrorState( - "Could not find gemstone slot price for ${stack.name}", - "EstimatedItemValue has no gemstoneUnlockCosts for $internalName" - ) - return 0.0 - } - - var totalPrice = 0.0 - val slots = gemstoneUnlockCosts[internalName] ?: return 0.0 - for (slot in slots) { - if (!unlockedSlots.contains(slot.key)) continue - - val previousTotal = totalPrice - for (ingredients in slot.value) { - val ingredient = Ingredient(manager, ingredients) - - totalPrice += if (ingredient.isCoins) { - ingredient.count - } else { - getPrice(ingredient.internalItemId) * ingredient.count - } - } - - val splitSlot = slot.key.split("_") // eg. SAPPHIRE_1 - val colorCode = GemstoneSlotType.getColorCode(splitSlot[0]) - val formattedPrice = NumberUtil.format(totalPrice - previousTotal) - - // eg. SAPPHIRE_1 -> Sapphire Slot 2 - val displayName = splitSlot[0].lowercase(Locale.ENGLISH).replaceFirstChar(Char::uppercase) + " Slot" + - // If the slot index is 0, we don't need to specify - if (splitSlot[1] != "0") " " + (splitSlot[1].toInt() + 1) else "" - - priceMap[" §$colorCode $displayName §7(§6$formattedPrice§7)"] = totalPrice - previousTotal - } - - list.add("§7Gemstone Slot Unlock Cost: §6" + NumberUtil.format(totalPrice)) - list += priceMap.sortedDesc().keys - return totalPrice - } - @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "misc.estimatedIemValueEnabled", "misc.estimatedItemValues.enabled") diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt new file mode 100644 index 000000000..40d274632 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -0,0 +1,675 @@ +package at.hannibal2.skyhanni.features.misc.items + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.getItemName +import at.hannibal2.skyhanni.utils.ItemUtils.getItemNameOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment +import at.hannibal2.skyhanni.utils.LorenzRarity +import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName +import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getPrice +import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull +import at.hannibal2.skyhanni.utils.NumberUtil +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAbilityScrolls +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getArmorDye +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAttributes +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDrillUpgrades +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDungeonStarCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnrichment +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getExtraAttributes +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFarmingForDummiesCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getGemstones +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHelmetSkin +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHotPotatoCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getManaDisintegrators +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getPolarvoidBookCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getPowerScroll +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getRune +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getSilexCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getTransmissionTunerCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasArtOfPeace +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasArtOfWar +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasBookOfStats +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasEtherwarp +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasJalapenoBook +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.hasWoodSingularity +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRecombobulated +import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import com.google.gson.JsonObject +import io.github.moulberry.notenoughupdates.recipes.Ingredient +import io.github.moulberry.notenoughupdates.util.Constants +import net.minecraft.item.ItemStack +import java.util.Locale + +object EstimatedItemValueCalculator { + private val config get() = SkyHanniMod.feature.misc.estimatedItemValues + + fun calculate(stack: ItemStack, list: MutableList): Pair { + var totalPrice = 0.0 + val basePrice = addBaseItem(stack, list) + totalPrice += basePrice + + totalPrice += addAttributeCost(stack, list) + + totalPrice += addReforgeStone(stack, list) + + // once + totalPrice += addRecomb(stack, list) + totalPrice += addArtOfWar(stack, list) + totalPrice += addArtOfPiece(stack, list) + totalPrice += addEtherwarp(stack, list) + totalPrice += addPowerScrolls(stack, list) + totalPrice += addWoodSingularity(stack, list) + totalPrice += addJalapenoBook(stack, list) + totalPrice += addStatsBook(stack, list) + totalPrice += addEnrichment(stack, list) + + // counted + totalPrice += addMasterStars(stack, list) + totalPrice += addHotPotatoBooks(stack, list) + totalPrice += addFarmingForDummies(stack, list) + totalPrice += addSilex(stack, list) + totalPrice += addTransmissionTuners(stack, list) + totalPrice += addManaDisintegrators(stack, list) + totalPrice += addPolarvoidBook(stack, list) + + // cosmetic + totalPrice += addHelmetSkin(stack, list) + totalPrice += addArmorDye(stack, list) + totalPrice += addRune(stack, list) + + // dynamic + totalPrice += addAbilityScrolls(stack, list) + totalPrice += addDrillUpgrades(stack, list) + totalPrice += addGemstoneSlotUnlockCost(stack, list) + totalPrice += addGemstones(stack, list) + totalPrice += addEnchantments(stack, list) + return Pair(totalPrice, basePrice) + } + + private fun addAttributeCost(stack: ItemStack, list: MutableList): Double { + val attributes = stack.getAttributes() ?: return 0.0 + var internalName = stack.getInternalName().asString().removePrefix("VANQUISHED_") + val kuudraSets = listOf("AURORA", "CRIMSON", "TERROR", "HOLLOW") + var genericName = internalName + if (kuudraSets.any { internalName.contains(it) } + && listOf("CHESTPLATE", "LEGGINGS", "HELMET", "BOOTS").any { internalName.endsWith(it) }) { + for (prefix in listOf("HOT_", "BURNING_", "FIERY_", "INFERNAL_")) { + internalName = internalName.removePrefix(prefix) + } + genericName = kuudraSets.fold(internalName) { acc, part -> acc.replace(part, "GENERIC_KUUDRA") } + } + if (internalName == "ATTRIBUTE_SHARD" && attributes.size == 1) { + val price = + getPriceOrCompositePriceForAttribute( + "ATTRIBUTE_SHARD+ATTRIBUTE_" + attributes[0].first, + attributes[0].second + ) + if (price != null) { + list.add( + "§7Attribute §9${ + attributes[0].first.fixMending().split("_").joinToString(" ") { it.firstLetterUppercase() } + } ${attributes[0].second}§7: (§6${NumberUtil.format(price)}§7)" + ) + return price + } + } + if (attributes.size != 2) return 0.0 + val basePrice = internalName.asInternalName().getPriceOrNull() ?: 0.0 + var subTotal = 0.0 + val combo = ("$internalName+ATTRIBUTE_${attributes[0].first}+ATTRIBUTE_${attributes[1].first}").asInternalName() + val comboPrice = combo.getPriceOrNull() + if (comboPrice != null && comboPrice > basePrice) { + list.add("§7Attribute Combo: (§6${NumberUtil.format(comboPrice)}§7)") + subTotal += comboPrice - basePrice + } else { + list.add("§7Attributes:") + } + for (attr in attributes) { + val price = + getPriceOrCompositePriceForAttribute("$genericName+ATTRIBUTE_${attr.first}", attr.second) + if (price != null) { + subTotal += price + } + val displayName = attr.first.fixMending() + list.add( + " §9${ + displayName.split("_").joinToString(" ") { it.firstLetterUppercase() } + } ${attr.second}§7: §6${if (price != null) NumberUtil.format(price) else "Unknown"}" + ) + } + return subTotal + } + + private fun String.fixMending() = if (this == "MENDING") "VITALITY" else this + + private fun getPriceOrCompositePriceForAttribute(attributeName: String, level: Int): Double? { + return (1..10).mapNotNull { lowerLevel -> + "$attributeName;$lowerLevel".asInternalName().getPriceOrNull() + ?.let { it / (1 shl lowerLevel) * (1 shl level).toDouble() } + }.minOrNull() + } + + private fun addReforgeStone(stack: ItemStack, list: MutableList): Double { + val rawReforgeName = stack.getReforgeName() ?: return 0.0 + + for ((rawInternalName, values) in Constants.REFORGESTONES.entrySet()) { + val stoneJson = values.asJsonObject + val reforgeName = stoneJson.get("reforgeName").asString + if (rawReforgeName == reforgeName.lowercase() || rawReforgeName == rawInternalName.lowercase()) { + val internalName = rawInternalName.asInternalName() + val reforgeStonePrice = internalName.getPrice() + val reforgeStoneName = internalName.getItemName() + + val reforgeCosts = stoneJson.get("reforgeCosts").asJsonObject + val applyCost = getReforgeStoneApplyCost(stack, reforgeCosts, internalName) ?: return 0.0 + + list.add("§7Reforge: §9$reforgeName") + list.add(" §7Stone $reforgeStoneName §7(§6" + NumberUtil.format(reforgeStonePrice) + "§7)") + list.add(" §7Apply cost: (§6" + NumberUtil.format(applyCost) + "§7)") + return reforgeStonePrice + applyCost + } + } + + return 0.0 + } + + private fun getReforgeStoneApplyCost( + stack: ItemStack, + reforgeCosts: JsonObject, + reforgeStone: NEUInternalName + ): Int? { + var itemRarity = stack.getItemRarityOrNull() ?: return null + + // Catch cases of special or very special + if (itemRarity > LorenzRarity.MYTHIC) { + itemRarity = LorenzRarity.LEGENDARY + } else { + if (stack.isRecombobulated()) { + val oneBelow = itemRarity.oneBelow() + if (oneBelow == null) { + ErrorManager.logErrorState( + "Wrong item rarity detected in estimated item value for item ${stack.name}", + "Recombobulated item is common: ${stack.getInternalName()}, name:${stack.name}" + ) + return null + } + itemRarity = oneBelow + } + } + val rarityName = itemRarity.name + if (!reforgeCosts.has(rarityName)) { + val reforgesFound = reforgeCosts.entrySet().map { it.key } + ErrorManager.logErrorState( + "Can not calculate reforge cost for item ${stack.name}", + "item rarity '$itemRarity' is not in NEU repo reforge cost for reforge stone$reforgeStone ($reforgesFound)" + ) + return null + } + + return reforgeCosts[rarityName].asInt + } + + private fun addRecomb(stack: ItemStack, list: MutableList): Double { + if (!stack.isRecombobulated()) return 0.0 + + val price = "RECOMBOBULATOR_3000".asInternalName().getPrice() + list.add("§7Recombobulated: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addJalapenoBook(stack: ItemStack, list: MutableList): Double { + if (!stack.hasJalapenoBook()) return 0.0 + + val price = "JALAPENO_BOOK".asInternalName().getPrice() + list.add("§7Jalapeno Book: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addEtherwarp(stack: ItemStack, list: MutableList): Double { + if (!stack.hasEtherwarp()) return 0.0 + + val wtfHardcodedConduit = "ETHERWARP_CONDUIT".asInternalName() + val wtfHardcodedMerger = "ETHERWARP_MERGER".asInternalName() + val price = wtfHardcodedConduit.getPrice() + wtfHardcodedMerger.getPrice() + list.add("§7Etherwarp: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addWoodSingularity(stack: ItemStack, list: MutableList): Double { + if (!stack.hasWoodSingularity()) return 0.0 + + val price = "WOOD_SINGULARITY".asInternalName().getPrice() + list.add("§7Wood Singularity: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addArtOfWar(stack: ItemStack, list: MutableList): Double { + if (!stack.hasArtOfWar()) return 0.0 + + val price = "THE_ART_OF_WAR".asInternalName().getPrice() + list.add("§7The Art of War: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addStatsBook(stack: ItemStack, list: MutableList): Double { + if (!stack.hasBookOfStats()) return 0.0 + + val price = "BOOK_OF_STATS".asInternalName().getPrice() + list.add("§7Book of Stats: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + // TODO untested + private fun addArtOfPiece(stack: ItemStack, list: MutableList): Double { + if (!stack.hasArtOfPeace()) return 0.0 + + val price = "THE_ART_OF_PEACE".asInternalName().getPrice() + list.add("§7The Art Of Piece: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addHotPotatoBooks(stack: ItemStack, list: MutableList): Double { + val count = stack.getHotPotatoCount() ?: return 0.0 + + val hpb: Int + val fuming: Int + if (count <= 10) { + hpb = count + fuming = 0 + } else { + hpb = 10 + fuming = count - 10 + } + + var totalPrice = 0.0 + + val wtfHardcodedHpb = "HOT_POTATO_BOOK".asInternalName() + val hpbPrice = wtfHardcodedHpb.getPrice() * hpb + list.add("§7HPB's: §e$hpb§7/§e10 §7(§6" + NumberUtil.format(hpbPrice) + "§7)") + totalPrice += hpbPrice + + if (fuming > 0) { + val wtfHardcodedFuming = "FUMING_POTATO_BOOK".asInternalName() + val fumingPrice = wtfHardcodedFuming.getPrice() * fuming + list.add("§7Fuming: §e$fuming§7/§e5 §7(§6" + NumberUtil.format(fumingPrice) + "§7)") + totalPrice += fumingPrice + } + + return totalPrice + } + + private fun addFarmingForDummies(stack: ItemStack, list: MutableList): Double { + val count = stack.getFarmingForDummiesCount() ?: return 0.0 + + val wtfHardcodedDumbFarmers = "FARMING_FOR_DUMMIES".asInternalName() + val price = wtfHardcodedDumbFarmers.getPrice() * count + list.add("§7Farming for Dummies: §e$count§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addPolarvoidBook(stack: ItemStack, list: MutableList): Double { + val count = stack.getPolarvoidBookCount() ?: return 0.0 + + val broDilloMiningSoBad = "POLARVOID_BOOK".asInternalName() + val price = broDilloMiningSoBad.getPrice() * count + list.add("§7Polarvoid: §e$count§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addSilex(stack: ItemStack, list: MutableList): Double { + val tier = stack.getSilexCount() ?: return 0.0 + + val internalName = stack.getInternalName() + val maxTier = if (internalName == "STONK_PICKAXE".asInternalName()) 4 else 5 + + val wtfHardcodedSilex = "SIL_EX".asInternalName() + val price = wtfHardcodedSilex.getPrice() * tier + list.add("§7Silex: §e$tier§7/§e$maxTier §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addTransmissionTuners(stack: ItemStack, list: MutableList): Double { + val count = stack.getTransmissionTunerCount() ?: return 0.0 + + val wtfHardcodedTuner = "TRANSMISSION_TUNER".asInternalName() + val price = wtfHardcodedTuner.getPrice() * count + list.add("§7Transmission Tuners: §e$count§7/§e4 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addManaDisintegrators(stack: ItemStack, list: MutableList): Double { + val count = stack.getManaDisintegrators() ?: return 0.0 + + val wtfHardcodedTuner = "MANA_DISINTEGRATOR".asInternalName() + val price = wtfHardcodedTuner.getPrice() * count + list.add("§7Mana Disintegrators: §e$count§7/§e10 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addMasterStars(stack: ItemStack, list: MutableList): Double { + val totalStars = stack.getDungeonStarCount() ?: return 0.0 + + val masterStars = totalStars - 5 + if (masterStars < 1) return 0.0 + + var price = 0.0 + + val stars = mapOf( + "FIRST" to 1, + "SECOND" to 2, + "THIRD" to 3, + "FOURTH" to 4, + "FIFTH" to 5, + ) + + for ((prefix, number) in stars) { + if (masterStars >= number) { + price += "${prefix}_MASTER_STAR".asInternalName().getPrice() + } + } + + list.add("§7Master Stars: §e$masterStars§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addDrillUpgrades(stack: ItemStack, list: MutableList): Double { + val drillUpgrades = stack.getDrillUpgrades() ?: return 0.0 + + var totalPrice = 0.0 + val map = mutableMapOf() + for (internalName in drillUpgrades) { + val name = internalName.getItemName() + val price = internalName.getPriceOrNull() ?: continue + + totalPrice += price + val format = NumberUtil.format(price) + map[" $name §7(§6$format§7)"] = price + } + if (map.isNotEmpty()) { + list.add("§7Drill upgrades: §6" + NumberUtil.format(totalPrice)) + list += map.sortedDesc().keys + } + return totalPrice + } + + private fun addPowerScrolls(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getPowerScroll() ?: return 0.0 + + val price = internalName.getPrice() + val name = internalName.getItemName().removeColor() + list.add("§7$name: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addHelmetSkin(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getHelmetSkin() ?: return 0.0 + + val price = internalName.getPrice() + val name = internalName.getNameOrRepoError() + val displayname = name ?: "§c${internalName.asString()}" + list.add("§7Skin: $displayname §7(§6" + NumberUtil.format(price) + "§7)") + if (name == null) { + list.add(" §8(Not yet in NEU Repo)") + } + return price + } + + private fun addArmorDye(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getArmorDye() ?: return 0.0 + + val price = internalName.getPrice() + val name = internalName.getNameOrRepoError() + val displayname = name ?: "§c${internalName.asString()}" + list.add("§7Dye: $displayname §7(§6" + NumberUtil.format(price) + "§7)") + if (name == null) { + list.add(" §8(Not yet in NEU Repo)") + } + return price + } + + private fun addEnrichment(stack: ItemStack, list: MutableList): Double { + + val enrichmentName = stack.getEnrichment() ?: return 0.0 + val internalName = "TALISMAN_ENRICHMENT_$enrichmentName".asInternalName() + + val price = internalName.getPrice() + val name = internalName.getItemName() + list.add("§7Enrichment: $name §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private fun addRune(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getRune() ?: return 0.0 + + val price = internalName.getPrice() + val name = internalName.getItemNameOrNull() + val displayname = name ?: "§c${internalName.asString()}" + list.add("§7Rune: $displayname §7(§6" + NumberUtil.format(price) + "§7)") + if (name == null) { + list.add(" §8(Not yet in NEU Repo)") + } + return price + } + + private fun NEUInternalName.getNameOrRepoError(): String? { + val stack = getItemStackOrNull() ?: return null + return stack.nameWithEnchantment ?: "§cItem Name Error" + } + + private fun addAbilityScrolls(stack: ItemStack, list: MutableList): Double { + val abilityScrolls = stack.getAbilityScrolls() ?: return 0.0 + + var totalPrice = 0.0 + val map = mutableMapOf() + for (internalName in abilityScrolls) { + val name = internalName.getItemName() + val price = internalName.getPriceOrNull() ?: continue + + totalPrice += price + val format = NumberUtil.format(price) + map[" $name §7(§6$format§7)"] = price + } + if (map.isNotEmpty()) { + list.add("§7Ability Scrolls: §6" + NumberUtil.format(totalPrice)) + list += map.sortedDesc().keys + } + return totalPrice + } + + private fun addBaseItem(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getInternalName() + var price = internalName.getPrice() + if (price == -1.0) { + price = 0.0 + } + + val name = internalName.getItemName() + if (internalName.startsWith("ENCHANTED_BOOK_BUNDLE_")) { + list.add("§7Base item: $name") + return 0.0 + } + + list.add("§7Base item: $name §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + + private val hasAlwaysScavenger = listOf( + "CRYPT_DREADLORD_SWORD".asInternalName(), + "ZOMBIE_SOLDIER_CUTLASS".asInternalName(), + "CONJURING_SWORD".asInternalName(), + "EARTH_SHARD".asInternalName(), + "ZOMBIE_KNIGHT_SWORD".asInternalName(), + "SILENT_DEATH".asInternalName(), + "ZOMBIE_COMMANDER_WHIP".asInternalName(), + ) + + private fun addEnchantments(stack: ItemStack, list: MutableList): Double { + val enchantments = stack.getEnchantments() ?: return 0.0 + + var totalPrice = 0.0 + val map = mutableMapOf() + + val tieredEnchants = listOf("compact", "cultivating", "champion", "expertise", "hecatomb") + + val internalName = stack.getInternalName() + for ((rawName, rawLevel) in enchantments) { + // efficiency 1-5 is cheap, 6-10 is handled by silex + if (rawName == "efficiency") continue + + if (rawName == "scavenger" && rawLevel == 5 && internalName in hasAlwaysScavenger) { + continue + } + + var level = rawLevel + var multiplier = 1 + if (rawName == "ultimate_chimera" || rawName == "ultimate_fatal_tempo" || rawName == "smoldering") { + + when (rawLevel) { + 2 -> multiplier = 2 + 3 -> multiplier = 4 + 4 -> multiplier = 8 + 5 -> multiplier = 16 + } + level = 1 + + } + if (internalName.startsWith("ENCHANTED_BOOK_BUNDLE_")) { + multiplier = 5 + } + if (rawName in tieredEnchants) level = 1 + + val enchantmentName = "$rawName;$level".uppercase().asInternalName() + val itemStack = enchantmentName.getItemStackOrNull() ?: continue + val singlePrice = enchantmentName.getPriceOrNull() ?: continue + + var name = itemStack.getLore()[0] + if (multiplier > 1) { + name = "§8${multiplier}x $name" + } + val price = singlePrice * multiplier + + totalPrice += price + val format = NumberUtil.format(price) + + + map[" $name §7(§6$format§7)"] = price + } + val enchantmentsCap: Int = config.enchantmentsCap.get() + if (map.isNotEmpty()) { + list.add("§7Enchantments: §6" + NumberUtil.format(totalPrice)) + var i = 0 + for (entry in map.sortedDesc().keys) { + if (i == enchantmentsCap) { + val missing = map.size - enchantmentsCap + list.add(" §7§o$missing more enchantments..") + break + } + list.add(entry) + i++ + } + } + return totalPrice + } + + private fun addGemstones(stack: ItemStack, list: MutableList): Double { + val gemstones = stack.getGemstones() ?: return 0.0 + + var totalPrice = 0.0 + val counterMap = mutableMapOf() + for (gemstone in gemstones) { + val internalName = gemstone.getInternalName() + val old = counterMap[internalName] ?: 0 + counterMap[internalName] = old + 1 + } + + val priceMap = mutableMapOf() + for ((internalName, amount) in counterMap) { + + val name = internalName.getItemName() + val price = internalName.getPrice() * amount + + totalPrice += price + val format = NumberUtil.format(price) + + val text = if (amount == 1) { + " $name §7(§6$format§7)" + } else { + " §8${amount}x $name §7(§6$format§7)" + } + priceMap[text] = price + } + + if (priceMap.isNotEmpty()) { + list.add("§7Gemstones: §6" + NumberUtil.format(totalPrice)) + list += priceMap.sortedDesc().keys + } + return totalPrice + } + + private fun addGemstoneSlotUnlockCost(stack: ItemStack, list: MutableList): Double { + val internalName = stack.getInternalName() + + // item have to contains gems.unlocked_slots NBT array for unlocked slot detection + val unlockedSlots = + stack.getExtraAttributes()?.getCompoundTag("gems")?.getTag("unlocked_slots")?.toString() ?: return 0.0 + + // TODO detection for old items which doesnt have gems.unlocked_slots NBT array +// if (unlockedSlots == "null") return 0.0 + + val priceMap = mutableMapOf() + if (EstimatedItemValue.gemstoneUnlockCosts.isEmpty()) return 0.0 + + if (internalName !in EstimatedItemValue.gemstoneUnlockCosts) { + ErrorManager.logErrorState( + "Could not find gemstone slot price for ${stack.name}", + "EstimatedItemValue has no gemstoneUnlockCosts for $internalName" + ) + return 0.0 + } + + var totalPrice = 0.0 + val slots = EstimatedItemValue.gemstoneUnlockCosts[internalName] ?: return 0.0 + for (slot in slots) { + if (!unlockedSlots.contains(slot.key)) continue + + val previousTotal = totalPrice + for (ingredients in slot.value) { + val ingredient = Ingredient(NEUItems.manager, ingredients) + + totalPrice += if (ingredient.isCoins) { + ingredient.count + } else { + getPrice(ingredient.internalItemId) * ingredient.count + } + } + + val splitSlot = slot.key.split("_") // eg. SAPPHIRE_1 + val colorCode = SkyBlockItemModifierUtils.GemstoneSlotType.getColorCode(splitSlot[0]) + val formattedPrice = NumberUtil.format(totalPrice - previousTotal) + + // eg. SAPPHIRE_1 -> Sapphire Slot 2 + val displayName = splitSlot[0].lowercase(Locale.ENGLISH).replaceFirstChar(Char::uppercase) + " Slot" + + // If the slot index is 0, we don't need to specify + if (splitSlot[1] != "0") " " + (splitSlot[1].toInt() + 1) else "" + + priceMap[" §$colorCode $displayName §7(§6$formattedPrice§7)"] = totalPrice - previousTotal + } + + list.add("§7Gemstone Slot Unlock Cost: §6" + NumberUtil.format(totalPrice)) + list += priceMap.sortedDesc().keys + return totalPrice + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedWardrobePrice.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedWardrobePrice.kt index dd1f9d236..6655d71cd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedWardrobePrice.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedWardrobePrice.kt @@ -37,7 +37,7 @@ class EstimatedWardrobePrice { var totalPrice = 0.0 for (item in items) { val name = item.name - val price = EstimatedItemValue.getEstimatedItemPrice(item, mutableListOf()).first + val price = EstimatedItemValueCalculator.calculate(item, mutableListOf()).first totalPrice += price toolTip.add(index++, " §7- $name: §6${NumberUtil.format(price)}") @@ -55,7 +55,7 @@ class EstimatedWardrobePrice { for ((slot, item) in event.inventoryItems) { item.getInternalNameOrNull() ?: continue - val price = EstimatedItemValue.getEstimatedItemPrice(item, mutableListOf()).first + val price = EstimatedItemValueCalculator.calculate(item, mutableListOf()).first if (price == 0.0) continue val id = slot % 9 val list = map.getOrPut(id) { mutableListOf() } @@ -68,4 +68,4 @@ class EstimatedWardrobePrice { fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "misc.estimatedIemValueArmor", "misc.estimatedItemValues.armor") } -} \ No newline at end of file +} -- cgit From 8dd26f8883de2cc5997d891f7067360ff7ac5db8 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:13:36 +0100 Subject: Added a workaround for NEU Profile Viewer bug where the ItemTooltipEvent gets called for two items when hovering over the border between two items. --- .../skyhanni/features/misc/items/EstimatedItemValue.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index 05b61aa65..c5b87eb20 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -59,10 +59,23 @@ object EstimatedItemValue { if (Minecraft.getMinecraft().currentScreen is GuiProfileViewer) { updateItem(event.itemStack) - tryRendering() + if (!blockNextFrame && renderedItems < 2) { + tryRendering() + } + renderedItems++ } } + // Workaround for NEU Profile Viewer bug where the ItemTooltipEvent gets called for two items when hovering over the border between two items. + private var renderedItems = 0 + private var blockNextFrame = false + + @SubscribeEvent + fun onRenderOverlayGui(event: GuiRenderEvent.GuiOverlayRenderEvent) { + blockNextFrame = renderedItems > 1 + renderedItems = 0 + } + private fun tryRendering() { currentlyShowing = checkCurrentlyVisible() if (!currentlyShowing) return -- cgit From bb8c07cdaa0264120e0f934d99370a7321842ee6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:20:44 +0100 Subject: fixed more error messages with The Great Spook data getting stored in the Reputation Helper quest config by accident. --- .../nether/reputationhelper/dailyquest/QuestLoader.kt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt index 41ac1a9c7..541d0510c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt @@ -157,11 +157,9 @@ class QuestLoader(private val dailyQuestHelper: DailyQuestHelper) { fun loadConfig(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { if (dailyQuestHelper.greatSpook) return - for (text in storage.quests.toList()) { - if (text.contains("The Great Spook")) { - dailyQuestHelper.greatSpook = true - return - } + if (storage.quests.toList().any { hasGreatSpookLine(it) }) { + dailyQuestHelper.greatSpook = true + return } for (text in storage.quests.toList()) { val split = text.split(":") @@ -182,6 +180,15 @@ class QuestLoader(private val dailyQuestHelper: DailyQuestHelper) { } } + private fun hasGreatSpookLine(text: String) = when { + text.contains("The Great Spook") -> true + text.contains(" Days") -> true + text.contains("Fear: §r") -> true + text.contains("Primal Fears") -> true + + else -> false + } + private fun addQuest(element: Quest) { dailyQuestHelper.quests.add(element) if (dailyQuestHelper.quests.size > 5) { -- cgit From 1aed35c84c55688222818d2333059f9790db3c36 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:31:02 +0100 Subject: using visitorDrops.visitorRarities directly from the config instead of accessing the local field. hopefully this will prevent partial config resets in the future. --- .../features/garden/visitor/GardenVisitorDropStatistics.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index c4b7fc0a3..6a9d53e15 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -29,7 +29,6 @@ object GardenVisitorDropStatistics { private var acceptedVisitors = 0 var deniedVisitors = 0 private var totalVisitors = 0 - private var visitorRarities = mutableListOf() var coinsSpent = 0L var lastAccept = 0L @@ -117,6 +116,7 @@ object GardenVisitorDropStatistics { private fun setRarities(rarity: String) { acceptedVisitors += 1 val currentRarity = VisitorRarity.valueOf(rarity) + val visitorRarities = GardenAPI.config?.visitorDrops?.visitorRarities ?: return val temp = visitorRarities[currentRarity.ordinal] + 1 visitorRarities[currentRarity.ordinal] = temp saveAndUpdate() @@ -128,6 +128,7 @@ object GardenVisitorDropStatistics { //1 addAsSingletonList(format(totalVisitors, "Total", "§e", "")) //2 + val visitorRarities = hidden.visitorRarities if (visitorRarities.isNotEmpty()) { addAsSingletonList( "§a${visitorRarities[0].addSeparators()}§f-" + @@ -197,7 +198,6 @@ object GardenVisitorDropStatistics { hidden.acceptedVisitors = acceptedVisitors hidden.deniedVisitors = deniedVisitors totalVisitors = acceptedVisitors + deniedVisitors - hidden.visitorRarities = visitorRarities hidden.coinsSpent = coinsSpent hidden.rewardsCount = rewardsCount display = formatDisplay(drawDisplay(hidden)) @@ -215,7 +215,6 @@ object GardenVisitorDropStatistics { acceptedVisitors = hidden.acceptedVisitors deniedVisitors = hidden.deniedVisitors totalVisitors = acceptedVisitors + deniedVisitors - visitorRarities = hidden.visitorRarities coinsSpent = hidden.coinsSpent rewardsCount = hidden.rewardsCount saveAndUpdate() @@ -243,4 +242,4 @@ object GardenVisitorDropStatistics { enum class VisitorRarity { UNCOMMON, RARE, LEGENDARY, SPECIAL, -} \ No newline at end of file +} -- cgit From 940095657152c8a0323f1c261c1454b8035bea61 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 13:34:19 +0100 Subject: code cleanup --- .../garden/visitor/GardenVisitorDropStatistics.kt | 82 +++++++++++----------- 1 file changed, 42 insertions(+), 40 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index 6a9d53e15..1f1b10143 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -73,37 +73,37 @@ object GardenVisitorDropStatistics { if (!ProfileStorageData.loaded) return if (lastAccept - System.currentTimeMillis() <= 0 && lastAccept - System.currentTimeMillis() > -1000) { val message = event.message.removeColor().trim() - val hidden = GardenAPI.config?.visitorDrops ?: return + val storage = GardenAPI.config?.visitorDrops ?: return copperPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() - hidden.copper += amount + storage.copper += amount saveAndUpdate() } farmingExpPattern.matchMatcher(message) { val amount = group("amount").formatNumber() - hidden.farmingExp += amount + storage.farmingExp += amount saveAndUpdate() } gardenExpPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() if (amount > 80) return // some of the low visitor milestones will get through but will be minimal - hidden.gardenExp += amount + storage.gardenExp += amount saveAndUpdate() } bitsPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() - hidden.bits += amount + storage.bits += amount saveAndUpdate() } mithrilPowderPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() - hidden.mithrilPowder += amount + storage.mithrilPowder += amount saveAndUpdate() } gemstonePowderPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() - hidden.gemstonePowder += amount + storage.gemstonePowder += amount saveAndUpdate() } acceptPattern.matchMatcher(message) { @@ -122,19 +122,19 @@ object GardenVisitorDropStatistics { saveAndUpdate() } - private fun drawDisplay(hidden: Storage.ProfileSpecific.GardenStorage.VisitorDrops) = buildList> { + private fun drawDisplay(storage: Storage.ProfileSpecific.GardenStorage.VisitorDrops) = buildList> { //0 addAsSingletonList("§e§lVisitor Statistics") //1 addAsSingletonList(format(totalVisitors, "Total", "§e", "")) //2 - val visitorRarities = hidden.visitorRarities + val visitorRarities = storage.visitorRarities if (visitorRarities.isNotEmpty()) { addAsSingletonList( "§a${visitorRarities[0].addSeparators()}§f-" + - "§9${visitorRarities[1].addSeparators()}§f-" + - "§6${visitorRarities[2].addSeparators()}§f-" + - "§c${visitorRarities[3].addSeparators()}" + "§9${visitorRarities[1].addSeparators()}§f-" + + "§6${visitorRarities[2].addSeparators()}§f-" + + "§c${visitorRarities[3].addSeparators()}" ) } else { addAsSingletonList("§c?") @@ -150,9 +150,9 @@ object GardenVisitorDropStatistics { //5 addAsSingletonList("") //6 - addAsSingletonList(format(hidden.copper, "Copper", "§c", "")) + addAsSingletonList(format(storage.copper, "Copper", "§c", "")) //7 - addAsSingletonList(format(hidden.farmingExp, "Farming EXP", "§3", "§7")) + addAsSingletonList(format(storage.farmingExp, "Farming EXP", "§3", "§7")) //8 addAsSingletonList(format(coinsSpent, "Coins Spent", "§6", "")) @@ -171,13 +171,13 @@ object GardenVisitorDropStatistics { //17 addAsSingletonList("") //18 - addAsSingletonList(format(hidden.gardenExp, "Garden EXP", "§2", "§7")) + addAsSingletonList(format(storage.gardenExp, "Garden EXP", "§2", "§7")) //19 - addAsSingletonList(format(hidden.bits, "Bits", "§b", "§b")) + addAsSingletonList(format(storage.bits, "Bits", "§b", "§b")) //20 - addAsSingletonList(format(hidden.mithrilPowder, "Mithril Powder", "§2", "§2")) + addAsSingletonList(format(storage.mithrilPowder, "Mithril Powder", "§2", "§2")) //21 - addAsSingletonList(format(hidden.gemstonePowder, "Gemstone Powder", "§d", "§d")) + addAsSingletonList(format(storage.gemstonePowder, "Gemstone Powder", "§d", "§d")) } fun format(amount: Number, name: String, color: String, amountColor: String = color) = @@ -194,29 +194,29 @@ object GardenVisitorDropStatistics { fun saveAndUpdate() { if (!GardenAPI.inGarden()) return - val hidden = GardenAPI.config?.visitorDrops ?: return - hidden.acceptedVisitors = acceptedVisitors - hidden.deniedVisitors = deniedVisitors + val storage = GardenAPI.config?.visitorDrops ?: return + storage.acceptedVisitors = acceptedVisitors + storage.deniedVisitors = deniedVisitors totalVisitors = acceptedVisitors + deniedVisitors - hidden.coinsSpent = coinsSpent - hidden.rewardsCount = rewardsCount - display = formatDisplay(drawDisplay(hidden)) + storage.coinsSpent = coinsSpent + storage.rewardsCount = rewardsCount + display = formatDisplay(drawDisplay(storage)) } @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - val hidden = GardenAPI.config?.visitorDrops ?: return - if (hidden.visitorRarities.size == 0) { - hidden.visitorRarities.add(0) - hidden.visitorRarities.add(0) - hidden.visitorRarities.add(0) - hidden.visitorRarities.add(0) + val storage = GardenAPI.config?.visitorDrops ?: return + if (storage.visitorRarities.size == 0) { + storage.visitorRarities.add(0) + storage.visitorRarities.add(0) + storage.visitorRarities.add(0) + storage.visitorRarities.add(0) } - acceptedVisitors = hidden.acceptedVisitors - deniedVisitors = hidden.deniedVisitors + acceptedVisitors = storage.acceptedVisitors + deniedVisitors = storage.deniedVisitors totalVisitors = acceptedVisitors + deniedVisitors - coinsSpent = hidden.coinsSpent - rewardsCount = hidden.rewardsCount + coinsSpent = storage.coinsSpent + rewardsCount = storage.rewardsCount saveAndUpdate() } @@ -231,12 +231,14 @@ object GardenVisitorDropStatistics { @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.move(3, "garden.visitorDropsStatistics.enabled", "garden.visitors.dropsStatistics.enabled") - event.move(3, "garden.visitorDropsStatistics.textFormat", "garden.visitors.dropsStatistics.textFormat") - event.move(3, "garden.visitorDropsStatistics.displayNumbersFirst", "garden.visitors.dropsStatistics.displayNumbersFirst") - event.move(3, "garden.visitorDropsStatistics.displayIcons", "garden.visitors.dropsStatistics.displayIcons") - event.move(3, "garden.visitorDropsStatistics.onlyOnBarn", "garden.visitors.dropsStatistics.onlyOnBarn") - event.move(3, "garden.visitorDropsStatistics.visitorDropPos", "garden.visitors.dropsStatistics.pos") + val originalPrefix = "garden.visitorDropsStatistics." + val newPrefix = "garden.visitors.dropsStatistics." + event.move(3, "${originalPrefix}enabled", "${newPrefix}enabled") + event.move(3, "${originalPrefix}textFormat", "${newPrefix}textFormat") + event.move(3, "${originalPrefix}displayNumbersFirst", "${newPrefix}displayNumbersFirst") + event.move(3, "${originalPrefix}displayIcons", "${newPrefix}displayIcons") + event.move(3, "${originalPrefix}onlyOnBarn", "${newPrefix}onlyOnBarn") + event.move(3, "${originalPrefix}visitorDropPos", "${newPrefix}pos") } } -- cgit From d4b684fb35fb97fdf7a7548555dc8eb0a9dda2a9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 16:09:43 +0100 Subject: no more hidden stuff: renamed "config" and "hidden" to "storage" when working with stuff from ProfileStorageData --- .../hannibal2/skyhanni/config/commands/Commands.kt | 6 ++-- .../hannibal2/skyhanni/data/CropAccessoryData.kt | 4 +-- .../skyhanni/data/GardenCropMilestones.kt | 2 +- .../hannibal2/skyhanni/data/GardenCropUpgrades.kt | 2 +- .../features/combat/ghostcounter/GhostCounter.kt | 36 +++++++++++----------- .../features/combat/ghostcounter/GhostData.kt | 10 +++--- .../features/combat/ghostcounter/GhostUtil.kt | 8 ++--- .../features/garden/FarmingFortuneDisplay.kt | 6 ++-- .../skyhanni/features/garden/GardenAPI.kt | 8 ++--- .../features/garden/composter/ComposterAPI.kt | 4 +-- .../features/garden/composter/ComposterDisplay.kt | 18 +++++------ .../features/garden/composter/ComposterOverlay.kt | 8 ++--- .../features/garden/farming/CropMoneyDisplay.kt | 2 +- .../features/garden/farming/DicerRngDropCounter.kt | 6 ++-- .../features/garden/farming/FarmingArmorDrops.kt | 2 +- .../features/garden/farming/GardenCropSpeed.kt | 4 +-- .../features/garden/farming/GardenStartLocation.kt | 6 ++-- .../garden/fortuneguide/CaptureFarmingGear.kt | 36 +++++++++++----------- .../features/garden/fortuneguide/FFGuideGUI.kt | 4 +-- .../features/garden/fortuneguide/FFStats.kt | 18 +++++------ .../garden/fortuneguide/FortuneUpgrades.kt | 18 +++++------ .../garden/inventory/AnitaExtraFarmingFortune.kt | 2 +- .../features/garden/inventory/GardenPlotIcon.kt | 4 +-- .../garden/visitor/GardenVisitorDropStatistics.kt | 8 ++--- .../features/garden/visitor/GardenVisitorTimer.kt | 10 +++--- .../skyhanni/features/misc/CurrentPetDisplay.kt | 8 ++--- .../features/rift/area/westvillage/KloonHacking.kt | 8 ++--- .../at/hannibal2/skyhanni/utils/CombatUtils.kt | 6 ++-- 28 files changed, 127 insertions(+), 127 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 4a7e6cdcb..cadd9fedc 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -378,10 +378,10 @@ object Commands { } private fun clearFarmingItems() { - val config = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return LorenzUtils.chat("§e[SkyHanni] clearing farming items") - config.farmingItems.clear() - config.outdatedItems.clear() + storage.farmingItems.clear() + storage.outdatedItems.clear() } private fun registerCommand(name: String, description: String, function: (Array) -> Unit) { diff --git a/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt b/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt index 021e59b91..79202ffa2 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/CropAccessoryData.kt @@ -104,9 +104,9 @@ class CropAccessoryData { val pagesLoaded get() = accessoryPage.size var cropAccessory: CropAccessory? - get() = GardenAPI.config?.savedCropAccessory + get() = GardenAPI.storage?.savedCropAccessory private set(accessory) { - GardenAPI.config?.savedCropAccessory = accessory + GardenAPI.storage?.savedCropAccessory = accessory } // Derived partially from NotEnoughUpdates/NotEnoughUpdates, ProfileViewer.Profile#getInventoryInfo diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt index ecbaee591..154c34e5d 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt @@ -44,7 +44,7 @@ object GardenCropMilestones { private var cropMilestoneData: Map> = emptyMap() - val cropCounter: MutableMap? get() = GardenAPI.config?.cropCounter + val cropCounter: MutableMap? get() = GardenAPI.storage?.cropCounter // TODO make nullable fun CropType.getCounter() = cropCounter?.get(this) ?: 0 diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt index 15a18ca26..1ea0871ee 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropUpgrades.kt @@ -39,7 +39,7 @@ class GardenCropUpgrades { } companion object { - private val cropUpgrades: MutableMap? get() = GardenAPI.config?.cropUpgrades + private val cropUpgrades: MutableMap? get() = GardenAPI.storage?.cropUpgrades fun CropType.getUpgradeLevel() = cropUpgrades?.get(this) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt index 959a303e8..656ac7b9d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt @@ -61,7 +61,7 @@ import kotlin.math.roundToLong object GhostCounter { val config get() = SkyHanniMod.feature.combat.ghostCounter - val hidden get() = ProfileStorageData.profileSpecific?.ghostCounter + val storage get() = ProfileStorageData.profileSpecific?.ghostCounter private var display = emptyList>() var ghostCounterV3File = File("." + File.separator + "config" + File.separator + "ChatTriggers" + File.separator + "modules" + File.separator + "GhostCounterV3" + File.separator + ".persistantData.json") @@ -127,7 +127,7 @@ object GhostCounter { } val avgMagicFind = when (Option.TOTALDROPS.get()) { 0.0 -> "0" - else -> "${((((hidden?.totalMF!! / Option.TOTALDROPS.get()) + Math.ulp(1.0)) * 100) / 100).roundToPrecision(2)}" + else -> "${((((storage?.totalMF!! / Option.TOTALDROPS.get()) + Math.ulp(1.0)) * 100) / 100).roundToPrecision(2)}" } val xpHourFormatting = textFormatting.xpHourFormatting @@ -151,9 +151,9 @@ object GhostCounter { } val bestiaryFormatting = textFormatting.bestiaryFormatting - val currentKill = hidden?.bestiaryCurrentKill?.toInt() ?: 0 - val killNeeded = hidden?.bestiaryKillNeeded?.toInt() ?: 0 - val nextLevel = hidden?.bestiaryNextLevel?.toInt() ?: -1 + val currentKill = storage?.bestiaryCurrentKill?.toInt() ?: 0 + val killNeeded = storage?.bestiaryKillNeeded?.toInt() ?: 0 + val nextLevel = storage?.bestiaryNextLevel?.toInt() ?: -1 val bestiary = if (config.showMax) { when (nextLevel) { 26 -> bestiaryFormatting.maxed.replace("%currentKill%", currentKill.addSeparators()) @@ -283,7 +283,7 @@ object GhostCounter { Option.KILLCOMBO.add(num) Option.SKILLXPGAINED.add(gained * num.roundToLong()) Option.SKILLXPGAINED.add(gained * num.roundToLong(), true) - hidden?.bestiaryCurrentKill = hidden?.bestiaryCurrentKill?.plus(num) ?: num + storage?.bestiaryCurrentKill = storage?.bestiaryCurrentKill?.plus(num) ?: num } lastXp = res } @@ -385,7 +385,7 @@ object GhostCounter { Option.SORROWCOUNT, Option.VOLTACOUNT, Option.PLASMACOUNT, Option.GHOSTLYBOOTS -> { opt.add(1.0) opt.add(1.0, true) - hidden?.totalMF = hidden?.totalMF?.plus(group("mf").substring(4).toDouble()) + storage?.totalMF = storage?.totalMF?.plus(group("mf").substring(4).toDouble()) ?: group("mf").substring(4).toDouble() Option.TOTALDROPS.add(1.0) if (opt == Option.SORROWCOUNT) @@ -424,16 +424,16 @@ object GhostCounter { val currentLevel = group("nextLevel").toInt() when (val nextLevel = if (currentLevel >= 25) 26 else currentLevel + 1) { 26 -> { - hidden?.bestiaryNextLevel = 26.0 - hidden?.bestiaryCurrentKill = 250_000.0 - hidden?.bestiaryKillNeeded = 0.0 + storage?.bestiaryNextLevel = 26.0 + storage?.bestiaryCurrentKill = 250_000.0 + storage?.bestiaryKillNeeded = 0.0 } else -> { val killNeeded: Int = bestiaryData[nextLevel] ?: -1 - hidden?.bestiaryNextLevel = nextLevel.toDouble() - hidden?.bestiaryCurrentKill = 0.0 - hidden?.bestiaryKillNeeded = killNeeded.toDouble() + storage?.bestiaryNextLevel = nextLevel.toDouble() + storage?.bestiaryCurrentKill = 0.0 + storage?.bestiaryKillNeeded = killNeeded.toDouble() } } update() @@ -459,7 +459,7 @@ object GhostCounter { val bestiaryNextLevel = if ("§\\wGhost".toRegex().matches(ghostStack.displayName)) 1 else ghostStack.displayName.substring(8) .romanToDecimal() + 1 - hidden?.bestiaryNextLevel = bestiaryNextLevel.toDouble() + storage?.bestiaryNextLevel = bestiaryNextLevel.toDouble() var kills = 0.0 for (line in ghostStack.getLore()) { val l = line.removeColor().trim() @@ -467,8 +467,8 @@ object GhostCounter { kills = "Kills: (.*)".toRegex().find(l)?.groupValues?.get(1)?.formatNumber()?.toDouble() ?: 0.0 } ghostXPPattern.matchMatcher(line.removeColor().trim()) { - hidden?.bestiaryCurrentKill = if (kills > 0) kills else group("current").formatNumber().toDouble() - hidden?.bestiaryKillNeeded = group("total").formatNumber().toDouble() + storage?.bestiaryCurrentKill = if (kills > 0) kills else group("current").formatNumber().toDouble() + storage?.bestiaryKillNeeded = group("total").formatNumber().toDouble() } } update() @@ -476,10 +476,10 @@ object GhostCounter { @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - if (hidden?.configUpdateVersion == 0) { + if (storage?.configUpdateVersion == 0) { config.textFormatting.bestiaryFormatting.base = " &6Bestiary %display%: &b%value%" chat("§e[SkyHanni] Your GhostCounter config has been automatically adjusted.") - hidden?.configUpdateVersion = CONFIG_VALUE_VERSION + storage?.configUpdateVersion = CONFIG_VALUE_VERSION } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt index 70832980c..69094b991 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt @@ -63,28 +63,28 @@ object GhostData { if (s) session[this] = session[this]?.plus(i) ?: i else - GhostCounter.hidden?.data?.set(this, GhostCounter.hidden?.data?.get(this)?.plus(i) ?: i) + GhostCounter.storage?.data?.set(this, GhostCounter.storage?.data?.get(this)?.plus(i) ?: i) } fun set(i: Double, s: Boolean = false) { if (s) session[this] = i else - GhostCounter.hidden?.data?.set(this, i) + GhostCounter.storage?.data?.set(this, i) } fun getInt(s: Boolean = false): Int { return if (s) session[this]?.roundToInt() ?: 0 else - GhostCounter.hidden?.data?.get(this)?.roundToInt() ?: 0 + GhostCounter.storage?.data?.get(this)?.roundToInt() ?: 0 } fun get(s: Boolean = false): Double { return if (s) session[this] ?: 0.0 else - GhostCounter.hidden?.data?.get(this) ?: 0.0 + GhostCounter.storage?.data?.get(this) ?: 0.0 } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostUtil.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostUtil.kt index 6dffc62fc..b5b833423 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostUtil.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostUtil.kt @@ -17,7 +17,7 @@ object GhostUtil { opt.set(0.0) opt.set(0.0, true) } - GhostCounter.hidden?.totalMF = 0.0 + GhostCounter.storage?.totalMF = 0.0 GhostCounter.update() } @@ -79,7 +79,7 @@ object GhostUtil { GhostData.Option.VOLTACOUNT.add(json["VoltaCount"].asDouble) GhostData.Option.GHOSTLYBOOTS.add(json["GhostlyBootsCount"].asDouble) GhostData.Option.KILLS.add(json["ghostsKilled"].asDouble) - GhostCounter.hidden?.totalMF = GhostCounter.hidden?.totalMF?.plus(json["TotalMF"].asDouble) + GhostCounter.storage?.totalMF = GhostCounter.storage?.totalMF?.plus(json["TotalMF"].asDouble) ?: json["TotalMF"].asDouble GhostData.Option.TOTALDROPS.add(json["TotalDrops"].asDouble) c.ctDataImported = true @@ -120,7 +120,7 @@ object GhostUtil { ) fun String.formatBestiary(currentKill: Int, killNeeded: Int): String { - val bestiaryNextLevel = GhostCounter.hidden?.bestiaryNextLevel + val bestiaryNextLevel = GhostCounter.storage?.bestiaryNextLevel val currentLevel = bestiaryNextLevel?.let { if (it.toInt() < 0) "25" else "${it.toInt() - 1}" } ?: "§cNo Bestiary Level Data!" val nextLevel = bestiaryNextLevel?.let { if (GhostCounter.config.showMax) "25" else "${it.toInt()}" } @@ -141,4 +141,4 @@ object GhostUtil { private fun percent(number: Double) = 100.0.coerceAtMost(((number / 250_000) * 100).roundToPrecision(4)).toString() -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 6cdf64ca6..952786e32 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -142,7 +142,7 @@ class FarmingFortuneDisplay { companion object { private val config get() = SkyHanniMod.feature.garden.farmingFortunes - private val latestFF: MutableMap? get() = GardenAPI.config?.latestTrueFarmingFortune + private val latestFF: MutableMap? get() = GardenAPI.storage?.latestTrueFarmingFortune private val currentCrop get() = GardenAPI.getCurrentlyFarmedCrop() @@ -275,12 +275,12 @@ class FarmingFortuneDisplay { var otherFortune = 0.0 if (currentCrop == CropType.CARROT) { - GardenAPI.config?.fortune?.let { + GardenAPI.storage?.fortune?.let { if (it.carrotFortune) otherFortune = 12.0 } } if (currentCrop == CropType.PUMPKIN) { - GardenAPI.config?.fortune?.let { + GardenAPI.storage?.fortune?.let { if (it.pumpkinFortune) otherFortune = 12.0 } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt index 49eae1427..22f897a4c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt @@ -49,12 +49,12 @@ object GardenAPI { var mushroomCowPet = false private var inBarn = false val onBarnPlot get() = inBarn && inGarden() - val config get() = ProfileStorageData.profileSpecific?.garden + val storage get() = ProfileStorageData.profileSpecific?.garden var gardenExp: Long? - get() = config?.experience + get() = storage?.experience set(value) { value?.let { - config?.experience = it + storage?.experience = it } } @@ -164,7 +164,7 @@ object GardenAPI { SkyMartCopperPrice.inInventory || FarmingContestAPI.inInventory || VisitorAPI.inInventory || FFGuideGUI.isInGui() fun clearCropSpeed() { - config?.cropsPerSecond?.clear() + storage?.cropsPerSecond?.clear() GardenBestCropTime.reset() updateGardenTool() LorenzUtils.chat("§e[SkyHanni] Manually reset all crop speed data!") diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt index 3a22e5d39..299e02f40 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt @@ -9,7 +9,7 @@ import kotlin.time.Duration.Companion.minutes object ComposterAPI { var tabListData = mapOf() - val composterUpgrades: MutableMap? get() = GardenAPI.config?.composterUpgrades + val composterUpgrades: MutableMap? get() = GardenAPI.storage?.composterUpgrades fun ComposterUpgrade.getLevel(addOne: ComposterUpgrade?) = (composterUpgrades?.get(this) ?: 0) + if (addOne == this) 1 else 0 @@ -41,4 +41,4 @@ object ComposterAPI { val costFactor = 1.0 - costReduction.toDouble() / 100 return 2_000.0 * costFactor } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt index 5139d8a95..439b51b0c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterDisplay.kt @@ -20,7 +20,7 @@ import kotlin.time.DurationUnit class ComposterDisplay { private val config get() = SkyHanniMod.feature.garden.composters - private val hidden get() = GardenAPI.config + private val storage get() = GardenAPI.storage private var display = emptyList>() private var composterEmptyTime: Duration? = null @@ -100,7 +100,7 @@ class ComposterDisplay { private fun addComposterEmptyTime(emptyTime: Duration?): List { return if (emptyTime != null) { val millis = emptyTime.toDouble(DurationUnit.MILLISECONDS).toLong() - GardenAPI.config?.composterEmptyTime = System.currentTimeMillis() + millis + GardenAPI.storage?.composterEmptyTime = System.currentTimeMillis() + millis val format = TimeUtils.formatDuration(millis, maxUnits = 2) listOf(NEUItems.getItemStack("BUCKET"), "§b$format") } else { @@ -139,24 +139,24 @@ class ComposterDisplay { private fun sendNotify() { if (!config.notifyLow.enabled) return - val hidden = hidden ?: return + val storage = storage ?: return - if (ComposterAPI.getOrganicMatter() <= config.notifyLow.organicMatter && System.currentTimeMillis() >= hidden.informedAboutLowMatter) { + if (ComposterAPI.getOrganicMatter() <= config.notifyLow.organicMatter && System.currentTimeMillis() >= storage.informedAboutLowMatter) { if (config.notifyLow.title) { LorenzUtils.sendTitle("§cYour Organic Matter is low", 4.seconds) } LorenzUtils.chat("§e[SkyHanni] §cYour Organic Matter is low!") - hidden.informedAboutLowMatter = System.currentTimeMillis() + 60_000 * 5 + storage.informedAboutLowMatter = System.currentTimeMillis() + 60_000 * 5 } if (ComposterAPI.getFuel() <= config.notifyLow.fuel && - System.currentTimeMillis() >= hidden.informedAboutLowFuel + System.currentTimeMillis() >= storage.informedAboutLowFuel ) { if (config.notifyLow.title) { LorenzUtils.sendTitle("§cYour Fuel is low", 4.seconds) } LorenzUtils.chat("§e[SkyHanni] §cYour Fuel is low!") - hidden.informedAboutLowFuel = System.currentTimeMillis() + 60_000 * 5 + storage.informedAboutLowFuel = System.currentTimeMillis() + 60_000 * 5 } } @@ -172,7 +172,7 @@ class ComposterDisplay { } private fun checkWarningsAndOutsideGarden() { - val storage = GardenAPI.config ?: return + val storage = GardenAPI.storage ?: return val format = if (storage.composterEmptyTime != 0L) { val duration = storage.composterEmptyTime - System.currentTimeMillis() @@ -195,7 +195,7 @@ class ComposterDisplay { private fun warn(warningMessage: String) { if (!config.warnAlmostClose) return - val storage = GardenAPI.config ?: return + val storage = GardenAPI.storage ?: return if (LorenzUtils.inDungeons) return if (LorenzUtils.inKuudraFight) return diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt index 72845cc63..557fec6d0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt @@ -74,15 +74,15 @@ object ComposterOverlay { private var testOffset = 0 var currentOrganicMatterItem: String? - get() = GardenAPI.config?.composterCurrentOrganicMatterItem + get() = GardenAPI.storage?.composterCurrentOrganicMatterItem private set(value) { - GardenAPI.config?.composterCurrentOrganicMatterItem = value + GardenAPI.storage?.composterCurrentOrganicMatterItem = value } var currentFuelItem: String? - get() = GardenAPI.config?.composterCurrentFuelItem + get() = GardenAPI.storage?.composterCurrentFuelItem private set(value) { - GardenAPI.config?.composterCurrentFuelItem = value + GardenAPI.storage?.composterCurrentFuelItem = value } fun onCommand(args: Array) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt index ff65011c6..0cc07f7e7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt @@ -54,7 +54,7 @@ object CropMoneyDisplay { private var loaded = false private var ready = false private val cropNames = mutableMapOf() - private val toolHasBountiful get() = GardenAPI.config?.toolWithBountiful + private val toolHasBountiful get() = GardenAPI.storage?.toolWithBountiful @SubscribeEvent fun onPreProfileSwitch(event: PreProfileSwitchEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt index 040ab1710..d72540720 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt @@ -117,7 +117,7 @@ class DicerRngDropCounter { class ItemDrop(val crop: CropType, val rarity: DropRarity, val pattern: Regex) private fun saveConfig() { - val map = GardenAPI.config?.dicerRngDrops ?: return + val map = GardenAPI.storage?.dicerRngDrops ?: return map.clear() for (drop in drops) { val crop = drop.key @@ -129,7 +129,7 @@ class DicerRngDropCounter { @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - val map = GardenAPI.config?.dicerRngDrops ?: return + val map = GardenAPI.storage?.dicerRngDrops ?: return for ((internalName, amount) in map) { val split = internalName.split(".") val crop = CropType.getByName(split[0]) @@ -147,4 +147,4 @@ class DicerRngDropCounter { event.move(3, "garden.dicerCounterHideChat", "garden.dicerCounters.hideChat") event.move(3, "garden.dicerCounterPos", "garden.dicerCounters.pos") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt index 8092ff476..2617ad329 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt @@ -23,7 +23,7 @@ import kotlin.time.Duration.Companion.seconds class FarmingArmorDrops { private var display = emptyList() - private val storage get() = GardenAPI.config + private val storage get() = GardenAPI.storage private var hasArmor = false private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt index a9a2066bd..0f10ed883 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt @@ -22,8 +22,8 @@ import kotlin.concurrent.fixedRateTimer object GardenCropSpeed { private val config get() = SkyHanniMod.feature.garden - private val cropsPerSecond: MutableMap? get() = GardenAPI.config?.cropsPerSecond - private val latestBlocksPerSecond: MutableMap? get() = GardenAPI.config?.latestBlocksPerSecond + private val cropsPerSecond: MutableMap? get() = GardenAPI.storage?.cropsPerSecond + private val latestBlocksPerSecond: MutableMap? get() = GardenAPI.storage?.latestBlocksPerSecond var lastBrokenCrop: CropType? = null var lastBrokenTime = 0L diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenStartLocation.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenStartLocation.kt index 6ad3ce910..9452dc82f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenStartLocation.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenStartLocation.kt @@ -26,7 +26,7 @@ object GardenStartLocation { return } - val startLocations = GardenAPI.config?.cropStartLocations + val startLocations = GardenAPI.storage?.cropStartLocations if (startLocations == null) { LorenzUtils.chat("§c[SkyHanni] The config is not yet loaded, retry in a second.") return @@ -45,7 +45,7 @@ object GardenStartLocation { @SubscribeEvent fun onBlockClick(event: CropClickEvent) { if (!isEnabled()) return - val startLocations = GardenAPI.config?.cropStartLocations ?: return + val startLocations = GardenAPI.storage?.cropStartLocations ?: return val crop = GardenAPI.getCurrentlyFarmedCrop() ?: return if (crop != GardenCropSpeed.lastBrokenCrop) return @@ -58,7 +58,7 @@ object GardenStartLocation { @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled()) return - val startLocations = GardenAPI.config?.cropStartLocations ?: return + val startLocations = GardenAPI.storage?.cropStartLocations ?: return val crop = GardenAPI.cropInHand ?: return val location = startLocations[crop]?.add(-0.5, 0.5, -0.5) ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt index 38f17dbf3..c4f311941 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt @@ -23,8 +23,8 @@ import kotlin.math.round import kotlin.time.Duration.Companion.days class CaptureFarmingGear { - private val farmingItems get() = GardenAPI.config?.fortune?.farmingItems - private val outdatedItems get() = GardenAPI.config?.fortune?.outdatedItems + private val farmingItems get() = GardenAPI.storage?.fortune?.farmingItems + private val outdatedItems get() = GardenAPI.storage?.fortune?.outdatedItems // TODO USE SH-REPO private val farmingLevelUpPattern = "SKILL LEVEL UP Farming .*➜(?.*)".toPattern() @@ -43,7 +43,7 @@ class CaptureFarmingGear { "FERMENTO", "SQUASH", "CROPIE", "MELON", "FARM", "RANCHERS", "FARMER", "RABBIT" ) - private val farmingItems get() = GardenAPI.config?.fortune?.farmingItems + private val farmingItems get() = GardenAPI.storage?.fortune?.farmingItems fun captureFarmingGear() { val farmingItems = farmingItems ?: return @@ -74,19 +74,19 @@ class CaptureFarmingGear { } for (line in TabListData.getTabList()) { strengthPattern.matchMatcher(line) { - GardenAPI.config?.fortune?.farmingStrength = group("strength").toInt() + GardenAPI.storage?.fortune?.farmingStrength = group("strength").toInt() } } } fun reverseCarrotFortune() { - val storage = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return storage.carrotFortune = !storage.carrotFortune LorenzUtils.chat("§2Toggled exportable carrot fortune to: ${storage.carrotFortune}") } fun reversePumpkinFortune() { - val storage = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return storage.pumpkinFortune = !storage.pumpkinFortune LorenzUtils.chat("§2Toggled expired pumpkin fortune to: ${storage.pumpkinFortune}") } @@ -100,7 +100,7 @@ class CaptureFarmingGear { @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (!LorenzUtils.inSkyBlock) return - val hidden = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return val farmingItems = farmingItems ?: return val outdatedItems = outdatedItems ?: return if (event.inventoryName == "Your Equipment and Stats") { @@ -117,7 +117,7 @@ class CaptureFarmingGear { val enchantments = slot.getEnchantments() ?: emptyMap() val greenThumbLvl = (enchantments["green_thumb"] ?: continue) val visitors = FarmingFortuneDisplay.greenThumbFortune / (greenThumbLvl * 0.05) - GardenAPI.config?.uniqueVisitors = round(visitors).toInt() + GardenAPI.storage?.uniqueVisitors = round(visitors).toInt() } } } @@ -170,7 +170,7 @@ class CaptureFarmingGear { if (event.inventoryName.contains("Your Skills")) { for ((_, item) in event.inventoryItems) { if (item.displayName.contains("Farming ")) { - hidden.farmingLevel = item.displayName.split(" ").last().romanToDecimalIfNeeded() + storage.farmingLevel = item.displayName.split(" ").last().romanToDecimalIfNeeded() } } } @@ -194,7 +194,7 @@ class CaptureFarmingGear { plotsUnlocked -= 1 } } - hidden.plotsUnlocked = plotsUnlocked + storage.plotsUnlocked = plotsUnlocked } if (event.inventoryName.contains("Anita")) { var level = -1 @@ -209,9 +209,9 @@ class CaptureFarmingGear { } } if (level == -1) { - hidden.anitaUpgrade = 15 + storage.anitaUpgrade = 15 } else { - hidden.anitaUpgrade = level + storage.anitaUpgrade = level } } } @@ -219,17 +219,17 @@ class CaptureFarmingGear { @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!LorenzUtils.inSkyBlock) return - val hidden = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return val outdatedItems = outdatedItems ?: return val msg = event.message.removeColor().trim() fortuneUpgradePattern.matchMatcher(msg) { ProfileStorageData.playerSpecific?.gardenCommunityUpgrade = group("level").romanToDecimal() } farmingLevelUpPattern.matchMatcher(msg) { - hidden.farmingLevel = group("level").romanToDecimalIfNeeded() + storage.farmingLevel = group("level").romanToDecimalIfNeeded() } anitaBuffPattern.matchMatcher(msg) { - hidden.anitaUpgrade = group("level").toInt() / 4 + storage.anitaUpgrade = group("level").toInt() / 4 } lotusUpgradePattern.matchMatcher(msg) { val piece = group("piece").uppercase() @@ -248,13 +248,13 @@ class CaptureFarmingGear { } } cakePattern.matchMatcher(msg) { - hidden.cakeExpiring = System.currentTimeMillis() + 2.days.inWholeMilliseconds + storage.cakeExpiring = System.currentTimeMillis() + 2.days.inWholeMilliseconds } if (msg == "CARROTS EXPORTATION COMPLETE!") { - hidden.carrotFortune = true + storage.carrotFortune = true } if (msg == "PUMPKINS EXPORTATION COMPLETE!") { - hidden.pumpkinFortune = true + storage.pumpkinFortune = true } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt index b7e103be1..932fbbacd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt @@ -46,7 +46,7 @@ open class FFGuideGUI : GuiScreen() { fun isInGui() = Minecraft.getMinecraft().currentScreen is FFGuideGUI fun FarmingItems.getItem(): ItemStack { - val fortune = GardenAPI.config?.fortune ?: return getFallbackItem(this) + val fortune = GardenAPI.storage?.fortune ?: return getFallbackItem(this) val farmingItems = fortune.farmingItems farmingItems[this]?.let { return it } @@ -467,4 +467,4 @@ open class FFGuideGUI : GuiScreen() { abstract class FFGuidePage { abstract fun drawPage(mouseX: Int, mouseY: Int, partialTicks: Float) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt index 24d125d56..255d94b24 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt @@ -15,7 +15,7 @@ import net.minecraft.item.ItemStack import kotlin.math.floor object FFStats { - private val toolHasBountiful get() = GardenAPI.config?.toolWithBountiful + private val toolHasBountiful get() = GardenAPI.storage?.toolWithBountiful private val mathCrops = listOf(CropType.WHEAT, CropType.CARROT, CropType.POTATO, CropType.SUGAR_CANE, CropType.NETHER_WART) @@ -51,7 +51,7 @@ object FFStats { val cropPage = mutableMapOf>() fun loadFFData() { - cakeExpireTime = GardenAPI.config?.fortune?.cakeExpiring ?: -1L + cakeExpireTime = GardenAPI.storage?.fortune?.cakeExpiring ?: -1L getEquipmentFFData(FarmingItems.NECKLACE.getItem(), necklaceFF) getEquipmentFFData(FarmingItems.CLOAK.getItem(), cloakFF) @@ -151,12 +151,12 @@ object FFStats { else -> {} } if (crop == CropType.CARROT) { - val storage = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return val carrotFortune = if (storage.carrotFortune) 12.0 else 0.0 cropPage[FortuneStats.EXPORTED_CARROT] = Pair(carrotFortune, 12.0) } if (crop == CropType.PUMPKIN) { - val storage = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return val pumpkinFortune = if (storage.pumpkinFortune) 12.0 else 0.0 cropPage[FortuneStats.EXPIRED_PUMPKIN] = Pair(pumpkinFortune, 12.0) } @@ -199,13 +199,13 @@ object FFStats { } private fun getGenericFF(out: MutableMap) { - val savedStats = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return out[FFTypes.TOTAL] = 0.0 out[FFTypes.BASE_FF] = 100.0 - out[FFTypes.FARMING_LVL] = savedStats.farmingLevel.toDouble() * 4 + out[FFTypes.FARMING_LVL] = storage.farmingLevel.toDouble() * 4 out[FFTypes.COMMUNITY_SHOP] = (ProfileStorageData.playerSpecific?.gardenCommunityUpgrade ?: -1).toDouble() * 4 - out[FFTypes.PLOTS] = savedStats.plotsUnlocked.toDouble() * 3 - out[FFTypes.ANITA] = savedStats.anitaUpgrade.toDouble() * 4 + out[FFTypes.PLOTS] = storage.plotsUnlocked.toDouble() * 3 + out[FFTypes.ANITA] = storage.anitaUpgrade.toDouble() * 4 if (cakeExpireTime - System.currentTimeMillis() > 0 || cakeExpireTime == -1L) { out[FFTypes.CAKE] = 5.0 } else { @@ -245,7 +245,7 @@ object FFStats { private fun getPetFF(pet: ItemStack): Double { val petLevel = pet.getPetLevel() - val strength = (GardenAPI.config?.fortune?.farmingStrength) + val strength = (GardenAPI.storage?.fortune?.farmingStrength) if (strength != null) { val rawInternalName = pet.getInternalName() return when { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt index 7e79235ff..1f6f80f5a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt @@ -31,22 +31,22 @@ object FortuneUpgrades { val cropSpecificUpgrades = mutableListOf() fun generateGenericUpgrades() { - val hidden = GardenAPI.config?.fortune ?: return + val storage = GardenAPI.storage?.fortune ?: return genericUpgrades.clear() - if (hidden.plotsUnlocked != -1 && hidden.plotsUnlocked != 24) { + if (storage.plotsUnlocked != -1 && storage.plotsUnlocked != 24) { genericUpgrades.add( FortuneUpgrade( - "§7Unlock your ${(hidden.plotsUnlocked + 1).addSuffix()} §7plot", - null, "COMPOST", compostNeeded[hidden.plotsUnlocked], 3.0 + "§7Unlock your ${(storage.plotsUnlocked + 1).addSuffix()} §7plot", + null, "COMPOST", compostNeeded[storage.plotsUnlocked], 3.0 ) ) } - if (hidden.anitaUpgrade != -1 && hidden.anitaUpgrade != 15) { + if (storage.anitaUpgrade != -1 && storage.anitaUpgrade != 15) { genericUpgrades.add( FortuneUpgrade( - "§7Upgrade Anita bonus to level ${hidden.anitaUpgrade + 1}", - null, "JACOBS_TICKET", anitaTicketsNeeded[hidden.anitaUpgrade], 4.0 + "§7Upgrade Anita bonus to level ${storage.anitaUpgrade + 1}", + null, "JACOBS_TICKET", anitaTicketsNeeded[storage.anitaUpgrade], 4.0 ) ) } @@ -91,7 +91,7 @@ object FortuneUpgrades { } private fun getEquipmentUpgrades() { - val visitors = GardenAPI.config?.uniqueVisitors?.toDouble() ?: 0.0 + val visitors = GardenAPI.storage?.uniqueVisitors?.toDouble() ?: 0.0 for (piece in equipment) { val item = piece.getItem() //todo tell them to buy the missing item @@ -296,4 +296,4 @@ object FortuneUpgrades { // no support for people with 5% discount private val anitaTicketsNeeded = listOf(0, 50, 50, 100, 100, 150, 150, 200, 200, 250, 300, 350, 400, 450, 1000) -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt index 904ec9bb4..2af928a30 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt @@ -31,7 +31,7 @@ class AnitaExtraFarmingFortune { if (!stack.displayName.contains("Extra Farming Fortune")) return - val anitaUpgrade = GardenAPI.config?.fortune?.anitaUpgrade ?: return + val anitaUpgrade = GardenAPI.storage?.fortune?.anitaUpgrade ?: return var contributionFactor = 1.0 val baseAmount = levelPrice[anitaUpgrade + 1]?.jacob_tickets ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenPlotIcon.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenPlotIcon.kt index 11318553c..eb4f31176 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenPlotIcon.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenPlotIcon.kt @@ -22,7 +22,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object GardenPlotIcon { private val config get() = SkyHanniMod.feature.garden.plotIcon - private val plotList get() = GardenAPI.config?.plotIcon?.plotList + private val plotList get() = GardenAPI.storage?.plotIcon?.plotList private var inInventory = false private var copyStack: ItemStack? = null private var editMode = 0 // 0 = off, 1 = on, 2 = reset @@ -152,4 +152,4 @@ object GardenPlotIcon { } } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index 1f1b10143..2213f9482 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -73,7 +73,7 @@ object GardenVisitorDropStatistics { if (!ProfileStorageData.loaded) return if (lastAccept - System.currentTimeMillis() <= 0 && lastAccept - System.currentTimeMillis() > -1000) { val message = event.message.removeColor().trim() - val storage = GardenAPI.config?.visitorDrops ?: return + val storage = GardenAPI.storage?.visitorDrops ?: return copperPattern.matchMatcher(message) { val amount = group("amount").formatNumber().toInt() @@ -116,7 +116,7 @@ object GardenVisitorDropStatistics { private fun setRarities(rarity: String) { acceptedVisitors += 1 val currentRarity = VisitorRarity.valueOf(rarity) - val visitorRarities = GardenAPI.config?.visitorDrops?.visitorRarities ?: return + val visitorRarities = GardenAPI.storage?.visitorDrops?.visitorRarities ?: return val temp = visitorRarities[currentRarity.ordinal] + 1 visitorRarities[currentRarity.ordinal] = temp saveAndUpdate() @@ -194,7 +194,7 @@ object GardenVisitorDropStatistics { fun saveAndUpdate() { if (!GardenAPI.inGarden()) return - val storage = GardenAPI.config?.visitorDrops ?: return + val storage = GardenAPI.storage?.visitorDrops ?: return storage.acceptedVisitors = acceptedVisitors storage.deniedVisitors = deniedVisitors totalVisitors = acceptedVisitors + deniedVisitors @@ -205,7 +205,7 @@ object GardenVisitorDropStatistics { @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - val storage = GardenAPI.config?.visitorDrops ?: return + val storage = GardenAPI.storage?.visitorDrops ?: return if (storage.visitorRarities.size == 0) { storage.visitorRarities.add(0) storage.visitorRarities.add(0) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt index d397d6a86..54dfb6d62 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt @@ -33,10 +33,10 @@ class GardenVisitorTimer { //TODO nea? // private val visitorInterval by dynamic(GardenAPI::config, Storage.ProfileSpecific.GardenStorage::visitorInterval) private var visitorInterval: Long? - get() = GardenAPI.config?.visitorInterval + get() = GardenAPI.storage?.visitorInterval set(value) { value?.let { - GardenAPI.config?.visitorInterval = it + GardenAPI.storage?.visitorInterval = it } } @@ -99,7 +99,7 @@ class GardenVisitorTimer { if (lastVisitors != -1 && visitorsAmount - lastVisitors == 1) { if (!queueFull) { visitorInterval = ((millis - 1) / 60_000L + 1) * 60_000L - GardenAPI.config?.visitorInterval = visitorInterval + GardenAPI.storage?.visitorInterval = visitorInterval } else { updateSixthVisitorArrivalTime() } @@ -112,7 +112,7 @@ class GardenVisitorTimer { sixthVisitorReady = false } millis = sixthVisitorArrivalTime - System.currentTimeMillis() - GardenAPI.config?.nextSixthVisitorArrival = + GardenAPI.storage?.nextSixthVisitorArrival = System.currentTimeMillis() + millis + (5 - visitorsAmount) * visitorInterval if (isSixthVisitorEnabled() && millis < 0) { visitorsAmount++ @@ -156,7 +156,7 @@ class GardenVisitorTimer { @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { lastVisitors = -1 - GardenAPI.config?.nextSixthVisitorArrival?.let { + GardenAPI.storage?.nextSixthVisitorArrival?.let { sixthVisitorArrivalTime = it } sixthVisitorReady = false diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/CurrentPetDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/CurrentPetDisplay.kt index e4b962281..4dfebc099 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/CurrentPetDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/CurrentPetDisplay.kt @@ -48,7 +48,7 @@ class CurrentPetDisplay { @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { - val config = ProfileStorageData.profileSpecific ?: return + val storage = ProfileStorageData.profileSpecific ?: return if (!inventoryNamePattern.matcher(event.inventoryName).matches()) return val lore = event.inventoryItems[4]?.getLore() ?: return @@ -56,7 +56,7 @@ class CurrentPetDisplay { for (line in lore) { selectedPetPattern.matchMatcher(line) { val newPet = group("pet") - config.currentPet = if (newPet != "§cNone") newPet else "" + storage.currentPet = if (newPet != "§cNone") newPet else "" } } } @@ -67,9 +67,9 @@ class CurrentPetDisplay { if (RiftAPI.inRift()) return if (!SkyHanniMod.feature.misc.pets.display) return - val config = ProfileStorageData.profileSpecific ?: return + val storage = ProfileStorageData.profileSpecific ?: return - SkyHanniMod.feature.misc.petDisplayPos.renderString(config.currentPet, posLabel = "Current Pet") + SkyHanniMod.feature.misc.petDisplayPos.renderString(storage.currentPet, posLabel = "Current Pet") } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/KloonHacking.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/KloonHacking.kt index 3aaafc42a..aa598c10b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/KloonHacking.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/KloonHacking.kt @@ -115,9 +115,9 @@ class KloonHacking { if (!RiftAPI.inRift()) return if (!config.waypoints) return if (!wearingHelmet) return - val hidden = ProfileStorageData.profileSpecific?.rift ?: return + val storage = ProfileStorageData.profileSpecific?.rift ?: return for (terminal in KloonTerminal.entries) { - if (terminal !in hidden.completedKloonTerminals) { + if (terminal !in storage.completedKloonTerminals) { event.drawWaypointFilled(terminal.location, LorenzColor.DARK_RED.toColor(), true, true) } } @@ -128,11 +128,11 @@ class KloonHacking { if (!RiftAPI.inRift()) return if (!wearingHelmet) return pattern.matchMatcher(event.message.removeColor()) { - val hidden = ProfileStorageData.profileSpecific?.rift ?: return + val storage = ProfileStorageData.profileSpecific?.rift ?: return val colour = group("colour") val completedTerminal = KloonTerminal.entries.firstOrNull { it.name == colour } ?: return if (completedTerminal != nearestTerminal) return - hidden.completedKloonTerminals.add(completedTerminal) + storage.completedKloonTerminals.add(completedTerminal) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/CombatUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/CombatUtils.kt index cbd39849d..b0af1d93e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/CombatUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/CombatUtils.kt @@ -72,8 +72,8 @@ object CombatUtils { lastKillUpdate = System.currentTimeMillis() killGainHourLast = killGainHour - GhostCounter.hidden?.bestiaryNextLevel?.toInt()?.let { nextLevel -> - GhostCounter.hidden?.bestiaryCurrentKill?.toInt()?.let { kill -> + GhostCounter.storage?.bestiaryNextLevel?.toInt()?.let { nextLevel -> + GhostCounter.storage?.bestiaryCurrentKill?.toInt()?.let { kill -> val sum = GhostData.bestiaryData.filterKeys { it <= nextLevel - 1 }.values.sum() val cKill = sum + kill val totalKill = if (GhostCounter.config.showMax) GhostCounter.bestiaryCurrentKill else cKill @@ -112,4 +112,4 @@ object CombatUtils { return interp } -} \ No newline at end of file +} -- cgit From 3c94ef471755ac333a8ab1a4ed4b26af2fe1be25 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Sun, 5 Nov 2023 15:21:54 +0000 Subject: Re-order config elements to be alphabetical (#625) Change config order to alphabetical. #625 --- .../at/hannibal2/skyhanni/config/Features.java | 58 ++++++++++++---------- 1 file changed, 32 insertions(+), 26 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index 9ae08f094..7f262474f 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -59,6 +59,12 @@ public class Features extends Config { return "SkyHanni " + SkyHanniMod.getVersion() + " by §channibal2§r, config by §5Moulberry §rand §5nea89"; } + /* + * If you are adding a new category, please insert it alphabetically + * The only exceptions to this are About and GUI, which are pinned to the top + * and Misc and Dev, which are to be at the bottom. Thanks! + */ + @Expose @Category(name = "About", desc = "Information about SkyHanni and updates") public About about = new About(); @@ -68,68 +74,68 @@ public class Features extends Config { public GUIConfig gui = new GUIConfig(); @Expose - @Category(name = "Chroma", desc = "Settings for Chroma text. (Credit to SBA)") - public ChromaConfig chroma = new ChromaConfig(); + @Category(name = "Bazaar", desc = "Bazaar settings.") + public BazaarConfig bazaar = new BazaarConfig(); @Expose @Category(name = "Chat", desc = "Change how the chat looks.") public ChatConfig chat = new ChatConfig(); @Expose - @Category(name = "Dungeon", desc = "Features that change the Dungeons experience in The Catacombs.") - public DungeonConfig dungeon = new DungeonConfig(); + @Category(name = "Chroma", desc = "Settings for Chroma text. (Credit to SBA)") + public ChromaConfig chroma = new ChromaConfig(); @Expose - @Category(name = "Inventory", desc = "Change the behavior of items and the inventory.") - public InventoryConfig inventory = new InventoryConfig(); + @Category(name = "Combat", desc = "Everything combat and PvE related.") + public CombatConfig combat = new CombatConfig(); @Expose - @Category(name = "Item Abilities", desc = "Stuff about item abilities.") - public ItemAbilityConfig itemAbilities = new ItemAbilityConfig(); + @Category(name = "Commands", desc = "Enable or disable commands.") + public CommandsConfig commands = new CommandsConfig(); @Expose @Category(name = "Crimson Isle", desc = "Things to do on the Crimson Isle/Nether island.") public CrimsonIsleConfig crimsonIsle = new CrimsonIsleConfig(); @Expose - @Category(name = "Minion", desc = "The minions on your private island.") - public MinionsConfig minions = new MinionsConfig(); + @Category(name = "Dungeon", desc = "Features that change the Dungeons experience in The Catacombs.") + public DungeonConfig dungeon = new DungeonConfig(); @Expose - @Category(name = "Bazaar", desc = "Bazaar settings.") - public BazaarConfig bazaar = new BazaarConfig(); + @Category(name = "Events", desc = "Stuff that is not always available.") + public EventConfig event = new EventConfig(); @Expose @Category(name = "Fishing", desc = "Fishing stuff.") public FishingConfig fishing = new FishingConfig(); @Expose - @Category(name = "Combat", desc = "Everything combat and PvE related.") - public CombatConfig combat = new CombatConfig(); - - @Expose - @Category(name = "Slayer", desc = "Slayer features.") - public SlayerConfig slayer = new SlayerConfig(); + @Category(name = "Garden", desc = "Features for the Garden island.") + public GardenConfig garden = new GardenConfig(); @Expose - @Category(name = "Mining", desc = "Features that help you break blocks.") - public MiningConfig mining = new MiningConfig(); + @Category(name = "Inventory", desc = "Change the behavior of items and the inventory.") + public InventoryConfig inventory = new InventoryConfig(); @Expose - @Category(name = "Commands", desc = "Enable or disable commands.") - public CommandsConfig commands = new CommandsConfig(); + @Category(name = "Item Abilities", desc = "Stuff about item abilities.") + public ItemAbilityConfig itemAbilities = new ItemAbilityConfig(); @Expose @Category(name = "Marked Players", desc = "Players that got marked with §e/shmarkplayer§7.") public MarkedPlayerConfig markedPlayers = new MarkedPlayerConfig(); @Expose - @Category(name = "Events", desc = "Stuff that is not always available.") - public EventConfig event = new EventConfig(); + @Category(name = "Minions", desc = "The minions on your private island.") + public MinionsConfig minions = new MinionsConfig(); @Expose - @Category(name = "Garden", desc = "Features for the Garden island.") - public GardenConfig garden = new GardenConfig(); + @Category(name = "Mining", desc = "Features that help you break blocks.") + public MiningConfig mining = new MiningConfig(); + + @Expose + @Category(name = "Slayer", desc = "Slayer features.") + public SlayerConfig slayer = new SlayerConfig(); @Expose @Category(name = "The Rift", desc = "Features for The Rift dimension.") -- cgit From f6f7f645e40ac2dcad944f4c833a3eee0297364e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 16:22:27 +0100 Subject: code cleanup --- src/main/java/at/hannibal2/skyhanni/config/Features.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index 7f262474f..ad7e5ab44 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -60,17 +60,17 @@ public class Features extends Config { } /* - * If you are adding a new category, please insert it alphabetically - * The only exceptions to this are About and GUI, which are pinned to the top - * and Misc and Dev, which are to be at the bottom. Thanks! + * If you are adding a new category, please insert it alphabetically + * The only exceptions to this are About and GUI, which are pinned to the top + * and Misc and Dev, which are to be at the bottom. Thanks! */ @Expose - @Category(name = "About", desc = "Information about SkyHanni and updates") + @Category(name = "About", desc = "Information about SkyHanni and updates.") public About about = new About(); @Expose - @Category(name = "GUI", desc = "Change the locations of GUI elements. (§e/sh gui§7)") + @Category(name = "GUI", desc = "Change the locations of GUI elements (§e/sh gui§7).") public GUIConfig gui = new GUIConfig(); @Expose @@ -82,7 +82,7 @@ public class Features extends Config { public ChatConfig chat = new ChatConfig(); @Expose - @Category(name = "Chroma", desc = "Settings for Chroma text. (Credit to SBA)") + @Category(name = "Chroma", desc = "Settings for Chroma text (Credit to SBA).") public ChromaConfig chroma = new ChromaConfig(); @Expose -- cgit From 71a4c42c95902b09f6e0e7f638d82cfc896856c9 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Sun, 5 Nov 2023 21:44:19 +0000 Subject: Fix typo (Peace not Piece) (#688) Fixed typo in The Art Of Peace. #688 --- .../skyhanni/features/misc/items/EstimatedItemValueCalculator.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index 40d274632..7d8f3c010 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -68,7 +68,7 @@ object EstimatedItemValueCalculator { // once totalPrice += addRecomb(stack, list) totalPrice += addArtOfWar(stack, list) - totalPrice += addArtOfPiece(stack, list) + totalPrice += addArtOfPeace(stack, list) totalPrice += addEtherwarp(stack, list) totalPrice += addPowerScrolls(stack, list) totalPrice += addWoodSingularity(stack, list) @@ -273,11 +273,11 @@ object EstimatedItemValueCalculator { } // TODO untested - private fun addArtOfPiece(stack: ItemStack, list: MutableList): Double { + private fun addArtOfPeace(stack: ItemStack, list: MutableList): Double { if (!stack.hasArtOfPeace()) return 0.0 val price = "THE_ART_OF_PEACE".asInternalName().getPrice() - list.add("§7The Art Of Piece: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") + list.add("§7The Art Of Peace: §a§l✔ §7(§6" + NumberUtil.format(price) + "§7)") return price } -- cgit From 01a61929fffbad63c91f821244e9580b192129cf Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 5 Nov 2023 23:00:08 +0100 Subject: 0.21 Beta 19 --- CHANGELOG.md | 31 +++++++++++++++++++--- FEATURES.md | 6 +++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 4 files changed, 36 insertions(+), 5 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 718921a2e..9ff1ca07c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,8 +75,14 @@ + Highlights Visitors outside the Garden. + Block Interacting with Visitors. - nea + Blocks you from interacting with / unlocking Visitors to allow for Dedication Cycling. -+ Added command /shpumpkin to toggle include/exclude Expired Pumpkin farming fortune in the /ff GUI and in the true ff display. - CalMWolfs ++ Added command **/shpumpkin** to toggle include/exclude Expired Pumpkin farming fortune in the /ff GUI and in the true ff + display. - CalMWolfs + Added auto-detection of Expired Pumpkin farming fortune. - CalMWolfs ++ Added Crimson Isle **Pablo NPC Helper**. - NetheriteMiner + + Similar to Quest Item Helper, shows a clickable message that grabs the flower needed from sacks. ++ Added **Fishing Bait Warnings.** - cimbraien + + Option to warn when no bait is used. + + Option to warn when used bait is changed. #### Events @@ -139,12 +145,15 @@ + Show key to press below burrow warp. - hannibal2 + Makes the Compact Potion message open the Potion effects menu on click. - jani + Added option to show King Talisman Helper outside Dwarven Mines. - hannibal2 -+ In-Game Date: Adds support for reading the in-game scoreboard, and also allow sun/moon symbol customization. - Erymanthus ++ In-Game Date: Adds support for reading the in-game scoreboard, and also allow sun/moon symbol customization. - + Erymanthus + Added Estimated Item Value support to NEU Profile Viewer - hannibal2 + Added support to import SBE Visual Words into SkyHanni. - HiZe + Add custom keybinds for Harp Helper. - Thunderblade73 + Show the custom hotkey name in the Harp inventory. - hannibal2 + Added a GUI element to remind you while /shmouselock is enabled. - CalMWolfs ++ Make Crimson Isle Quest Item Helper only get amount needed. - NetheriteMiner ++ Change config order to alphabetical. - walker ### Bug Fixes @@ -216,6 +225,13 @@ + Fixed tool fortune. - CalMWolfs + Fixed Item Ability Cooldown display not activating for Sword of Bad Health. - hannibal2 + Fixed the crop name gets replaced to internal name in /shwords. - hannibal2 ++ Show obfuscated fish as bait instead of caught item. - cimbraien ++ Fixed Estimated Item Value that renders twice inside NEU PV, by not rendering anything when the cursor is exactly in + between two items. - hannibal2 ++ fixed more error messages with The Great Spook data getting stored in the Reputation Helper quest config + accidentally. - hannibal2 ++ Hopefully fixed resets of Visitor Drops stats. - hannibal2 ++ Fixed typo in The Art Of Peace. - walker #### Config @@ -242,7 +258,16 @@ + Adding 100 lines to MobFinder.kt and making it better readable in the process. - walker + Making ChatFiler.kt way better, storing regex objects for reuse and preparing future repo support. - walker + Added command /shkingfix to reset the internal King Talisman Helper offset. - hannibal2 -+ Updated dependency version of junixsocket in DiscordIPC so that antivirus websites no longer show false positives. - NetheriteMiner ++ Updated dependency version of junixsocket in DiscordIPC so that antivirus websites no longer show false positives. - + NetheriteMiner ++ Changed wrong/missing neu version message to show NEU version 2.1.1-Pre-4 instead of beta versions. - CalMWolfs ++ Deleting the old "hidden" part of the config. - hannibal2 ++ This will reset parts of the config for users with 7-month-old SkyHanni versions that want to migrate into the + present. ++ Added a workaround for the NEU Profile Viewer bug where the ItemTooltipEvent gets called for two items when hovering + over the border between two items. - hannibal2 ++ Using visitorDrops.visitorRarities directly from the config instead of accessing the local field. Hopefully this will + prevent partial config resets in the future. - hannibal2 ## Version 0.20 diff --git a/FEATURES.md b/FEATURES.md index 527f7ed7a..2d2c53201 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -224,6 +224,10 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + Display the Hypixel timer until the fishing hook can be pulled out of the water/lava, only bigger and on your screen. + Alerts when the player catches a Legendary Sea Creature. - Cad ++ **Fishing Bait Warnings.** - cimbraien + + Option to warn when no bait is used. + + Option to warn when used bait is changed. +
@@ -630,6 +634,8 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + Quest Item Helper. (Crimson Isle) - NetheriteMiner + When you open the fetch item quest in the town board, it shows a clickable chat message that will grab the items needed from the sacks. ++ Crimson Isle **Pablo NPC Helper**. - NetheriteMiner + + Similar to Quest Item Helper, shows a clickable message that grabs the flower needed from sacks. + Red Scoreboard Numbers - Hides the red numbers in the scoreboard sidebar on the right side of the screen. + **Tia Relay Waypoint** - Show the next Relay waypoint for Tia The Fairy, where maintenance for the abiphone network needs to be done. diff --git a/build.gradle.kts b/build.gradle.kts index cd2087210..004e1338b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.18" +version = "0.21.Beta.19" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index fb75e37b5..defde6616 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -325,7 +325,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.18", + version = "0.21.Beta.19", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 4954f93cd878d269582ebe6ccc5486a3f8a5918b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Tue, 7 Nov 2023 01:46:18 +0100 Subject: tracker core (#697) Tracker API #697 --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 6 +- .../skyhanni/config/ConfigUpdaterMigrator.kt | 41 ++++- .../java/at/hannibal2/skyhanni/config/Storage.java | 31 +++- .../hannibal2/skyhanni/config/commands/Commands.kt | 6 +- .../features/garden/farming/DicerDropTracker.kt | 175 +++++++++++++++++++++ .../features/garden/farming/DicerRngDropCounter.kt | 150 ------------------ .../features/mining/powdertracker/PowderTracker.kt | 72 ++++----- .../features/slayer/SlayerItemProfitTracker.kt | 100 +++--------- .../skyhanni/utils/tracker/DisplayMode.kt | 7 + .../skyhanni/utils/tracker/SharedTracker.kt | 18 +++ .../skyhanni/utils/tracker/TrackerData.kt | 5 + .../skyhanni/utils/tracker/TrackerUtils.kt | 62 ++++++++ 12 files changed, 394 insertions(+), 279 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerData.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index defde6616..93342d26f 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -141,7 +141,7 @@ import at.hannibal2.skyhanni.features.garden.contest.JacobContestTimeNeeded import at.hannibal2.skyhanni.features.garden.contest.JacobFarmingContestsInventory import at.hannibal2.skyhanni.features.garden.farming.CropMoneyDisplay import at.hannibal2.skyhanni.features.garden.farming.CropSpeedMeter -import at.hannibal2.skyhanni.features.garden.farming.DicerRngDropCounter +import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops import at.hannibal2.skyhanni.features.garden.farming.FarmingWeightDisplay import at.hannibal2.skyhanni.features.garden.farming.GardenBurrowingSporesNotifier @@ -500,7 +500,7 @@ class SkyHanniMod { loadModule(GardenDeskInSBMenu()) loadModule(GardenLevelDisplay()) loadModule(FarmingWeightDisplay()) - loadModule(DicerRngDropCounter()) + loadModule(DicerDropTracker) loadModule(CropMoneyDisplay) loadModule(JacobFarmingContestsInventory()) loadModule(GardenNextJacobContest) @@ -605,7 +605,7 @@ class SkyHanniMod { loadModule(GardenPlotBorders()) loadModule(CosmeticFollowingLine()) loadModule(SuperpairsClicksAlert()) - loadModule(PowderTracker()) + loadModule(PowderTracker) loadModule(ModifyVisualWords) loadModule(TabListReader) loadModule(TabListRenderer) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index 69a77d6df..a290b9bf9 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -9,7 +9,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - val configVersion = 6 + val configVersion = 7 fun JsonElement.at(chain: List, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null @@ -26,7 +26,14 @@ object ConfigUpdaterMigrator { val new: JsonObject, val oldVersion: Int, var movesPerformed: Int, + val dynamicPrefix: Map>, ) : LorenzEvent() { + init { + dynamicPrefix.entries.filter { it.value.isEmpty() }.forEach { + logger.log("Dynamic prefix ${it.key} does not resolve to anything.") + } + } + fun move(since: Int, oldPath: String, newPath: String, transform: (JsonElement) -> JsonElement = { it }) { if (since <= oldVersion) { logger.log("Skipping move from $oldPath to $newPath ($since <= $oldVersion)") @@ -41,6 +48,22 @@ object ConfigUpdaterMigrator { } val op = oldPath.split(".") val np = newPath.split(".") + if (op.first().startsWith("#")) { + require(np.first() == op.first()) + val realPrefixes = dynamicPrefix[op.first()] + if (realPrefixes == null) { + logger.log("Could not resolve dynamic prefix $oldPath") + return + } + for (realPrefix in realPrefixes) { + move( + since, + "$realPrefix.${oldPath.substringAfter('.')}", + "$realPrefix.${newPath.substringAfter('.')}", transform + ) + return + } + } val oldElem = old.at(op, false) if (oldElem == null) { logger.log("Skipping move from $oldPath to $newPath ($oldPath not present)") @@ -83,9 +106,23 @@ object ConfigUpdaterMigrator { if (lV == configVersion) return config return (lV until configVersion).fold(config) { acc, i -> logger.log("Starting config transformation from $i to ${i + 1}") + val storage = acc.get("storage")?.asJsonObject + val dynamicPrefix: Map> = mapOf( + "#profile" to + (storage?.get("players")?.asJsonObject?.entrySet() + ?.flatMap { player -> + player.value.asJsonObject.get("profiles")?.asJsonObject?.entrySet()?.map { + "storage.players.${player.key}.profiles.${it.key}" + } ?: listOf() + } + ?: listOf()), + "#player" to + (storage?.get("players")?.asJsonObject?.entrySet()?.map { "storage.players.${it.key}" } + ?: listOf()), + ) val migration = ConfigFixEvent(acc, JsonObject().also { it.add("lastVersion", JsonPrimitive(i + 1)) - }, i, 0).also { it.postAndCatch() } + }, i, 0, dynamicPrefix).also { it.postAndCatch() } logger.log("Transformations scheduled: ${migration.new}") val mergesPerformed = merge(migration.old, migration.new) logger.log("Migration done with $mergesPerformed merges and ${migration.movesPerformed} moves performed") diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index ad17625fd..5c4ef3c63 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.features.misc.visualwords.VisualWord; import at.hannibal2.skyhanni.features.rift.area.westvillage.KloonTerminal; import at.hannibal2.skyhanni.utils.LorenzVec; import at.hannibal2.skyhanni.utils.NEUInternalName; +import at.hannibal2.skyhanni.utils.tracker.TrackerData; import com.google.gson.annotations.Expose; import net.minecraft.item.ItemStack; @@ -143,7 +144,18 @@ public class Storage { public CropAccessory savedCropAccessory = null; @Expose - public Map dicerRngDrops = new HashMap<>(); + public DicerDropTracker dicerDropTracker = new DicerDropTracker(); + + public static class DicerDropTracker extends TrackerData { + + public void reset() { + drops.clear(); + } + + @Expose + public Map> drops = new HashMap<>(); + + } @Expose public long informedAboutLowMatter = 0; @@ -304,7 +316,13 @@ public class Storage { @Expose public Map powderTracker = new HashMap<>(); - public static class PowderTracker { + public static class PowderTracker extends TrackerData { + + public void reset() { + rewards.clear(); + totalChestPicked = 0; + } + @Expose public int totalChestPicked = 0; @@ -353,7 +371,14 @@ public class Storage { @Expose public Map slayerProfitData = new HashMap<>(); - public static class SlayerProfitList { + public static class SlayerProfitList extends TrackerData { + + public void reset() { + items.clear(); + mobKillCoins = 0; + slayerSpawnCost = 0; + slayerCompletedCount = 0; + } @Expose public Map items = new HashMap<>(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index cadd9fedc..c612a9742 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -20,11 +20,13 @@ import at.hannibal2.skyhanni.features.garden.GardenNextJacobContest import at.hannibal2.skyhanni.features.garden.composter.ComposterOverlay import at.hannibal2.skyhanni.features.garden.farming.CropMoneyDisplay import at.hannibal2.skyhanni.features.garden.farming.CropSpeedMeter +import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker import at.hannibal2.skyhanni.features.garden.farming.FarmingWeightDisplay import at.hannibal2.skyhanni.features.garden.farming.GardenStartLocation import at.hannibal2.skyhanni.features.garden.fortuneguide.CaptureFarmingGear import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI import at.hannibal2.skyhanni.features.mining.KingTalismanHelper +import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker import at.hannibal2.skyhanni.features.minion.MinionFeatures import at.hannibal2.skyhanni.features.misc.CollectionTracker import at.hannibal2.skyhanni.features.misc.LockMouseLook @@ -158,7 +160,9 @@ object Commands { "shclearfarmingitems", "Clear farming items saved for the Farming Fortune Guide" ) { clearFarmingItems() } - registerCommand("shresetghostcounter", "Resets the ghost counter stats") { GhostUtil.reset() } + registerCommand("shresetghostcounter", "Resets the ghost counter") { GhostUtil.reset() } + registerCommand("shresetpowdertracker", "Resets the powder tracker") { PowderTracker.resetCommand(it) } + registerCommand("shresetdicertracker", "Resets the dicer counter") { DicerDropTracker.resetCommand(it) } registerCommand("shbingotoggle", "Toggle the bingo card display mode") { BingoCardDisplay.toggleCommand() } registerCommand( "shfarmingprofile", diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt new file mode 100644 index 000000000..a3b4f73cb --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt @@ -0,0 +1,175 @@ +package at.hannibal2.skyhanni.features.garden.farming + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.config.Storage.ProfileSpecific.GardenStorage.DicerDropTracker +import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.events.GardenToolChangeEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.PreProfileSwitchEvent +import at.hannibal2.skyhanni.features.garden.CropType +import at.hannibal2.skyhanni.features.garden.GardenAPI +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut +import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems +import at.hannibal2.skyhanni.utils.tracker.DisplayMode +import at.hannibal2.skyhanni.utils.tracker.SharedTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.inventory.GuiInventory +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object DicerDropTracker { + private var display = emptyList>() + private val itemDrops = mutableListOf() + private val config get() = SkyHanniMod.feature.garden.dicerCounters + private val currentSessionData = DicerDropTracker() + private var inventoryOpen = false + + init { + itemDrops.add(ItemDrop(CropType.MELON, DropRarity.UNCOMMON, "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.MELON, DropRarity.RARE, "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.MELON, DropRarity.CRAZY_RARE, "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§[a|9]Enchanted Melon(?: Block)?§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.MELON, DropRarity.PRAY_TO_RNGESUS, "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§9(\\d+)x §r§9Enchanted Melon Block§r§e!".toRegex())) + + itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.UNCOMMON, "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.RARE, "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.CRAZY_RARE, "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) + itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.PRAY_TO_RNGESUS, "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§(aEnchanted|9Polished) Pumpkin§r§e!".toRegex())) + } + + enum class DropRarity(val displayName: String) { + UNCOMMON("§a§lUNCOMMON DROP"), + RARE("§9§lRARE DROP"), + CRAZY_RARE("§d§lCRAZY RARE DROP"), + PRAY_TO_RNGESUS("§5§lPRAY TO RNGESUS DROP"), + } + + @SubscribeEvent + fun onPreProfileSwitch(event: PreProfileSwitchEvent) { + display = emptyList() + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!GardenAPI.inGarden()) return + if (!config.hideChat && !config.display) return + + val message = event.message + for (drop in itemDrops) { + if (drop.pattern.matches(message)) { + addDrop(drop.crop, drop.rarity) + if (config.hideChat) { + event.blockedReason = "dicer_drop_tracker" + } + return + } + } + } + + private fun update() { + currentDisplay()?.let { + display = drawDisplay(it) + } + } + + private fun drawDisplay(storage: DicerDropTracker) = buildList> { + val cropInHand = cropInHand ?: return@buildList + val items = storage.drops.getOrPut(cropInHand) { mutableMapOf() } + addAsSingletonList("§7Dicer Drop Tracker for $toolName§7:") + if (inventoryOpen) { + addDisplayModeToggle { + update() + } + } + for ((rarity, amount) in items.sortedDesc()) { + val displayName = rarity.displayName + addAsSingletonList(" §7- §e${amount.addSeparators()}x $displayName") + } + + if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { + addSessionResetButton("Dicer Drop Tracker", getSharedTracker()) { + update() + } + } + } + + private var cropInHand: CropType? = null + private var toolName = "" + + @SubscribeEvent + fun onGardenToolChange(event: GardenToolChangeEvent) { + val crop = event.crop + cropInHand = if (crop == CropType.MELON || crop == CropType.PUMPKIN) crop else null + if (cropInHand != null) { + toolName = event.toolItem!!.name!! + } + update() + } + + private fun addDrop(crop: CropType, rarity: DropRarity) { + val sharedTracker = getSharedTracker() ?: return + sharedTracker.modify { + val map = it.drops.getOrPut(crop) { mutableMapOf() } + map.addOrPut(rarity, 1) + } + update() + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent) { + if (!isEnabled()) return + + val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory + if (inventoryOpen != currentlyOpen) { + inventoryOpen = currentlyOpen + update() + } + config.pos.renderStringsAndItems(display, posLabel = "Dicer Drop Tracker") + } + + class ItemDrop(val crop: CropType, val rarity: DropRarity, val pattern: Regex) + + fun isEnabled() = GardenAPI.inGarden() && config.display + + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(3, "garden.dicerCounterDisplay", "garden.dicerCounters.display") + event.move(3, "garden.dicerCounterHideChat", "garden.dicerCounters.hideChat") + event.move(3, "garden.dicerCounterPos", "garden.dicerCounters.pos") + + event.move(7, "#profile.garden.dicerRngDrops", "#profile.garden.dicerDropTracker.drops") { old -> + val items: MutableMap> = mutableMapOf() + val oldItems = ConfigManager.gson.fromJson>(old, Map::class.java) + for ((internalName, amount) in oldItems) { + val split = internalName.split(".") + val crop = CropType.getByName(split[0]) + val rarityName = split[1] + val rarity = DropRarity.valueOf(rarityName) + items.getOrPut(crop) { mutableMapOf() }[rarity] = amount + } + + ConfigManager.gson.toJsonTree(items) + } + } + + private fun currentDisplay() = getSharedTracker()?.getCurrent() + + private fun getSharedTracker(): SharedTracker? { + val profileSpecific = ProfileStorageData.profileSpecific ?: return null + return SharedTracker(profileSpecific.garden.dicerDropTracker, currentSessionData) + } + + fun resetCommand(args: Array) { + TrackerUtils.resetCommand("Dicer Drop Tracker", "shresetdicertracker", args, getSharedTracker()) { + update() + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt deleted file mode 100644 index d72540720..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropCounter.kt +++ /dev/null @@ -1,150 +0,0 @@ -package at.hannibal2.skyhanni.features.garden.farming - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.events.ConfigLoadEvent -import at.hannibal2.skyhanni.events.GardenToolChangeEvent -import at.hannibal2.skyhanni.events.GuiRenderEvent -import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.PreProfileSwitchEvent -import at.hannibal2.skyhanni.features.garden.CropType -import at.hannibal2.skyhanni.features.garden.GardenAPI -import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc -import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class DicerRngDropCounter { - private var display = emptyList() - private val drops = mutableMapOf>() - private val itemDrops = mutableListOf() - private val config get() = SkyHanniMod.feature.garden.dicerCounters - - init { - initDrops() - itemDrops.add(ItemDrop(CropType.MELON, DropRarity.UNCOMMON, "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.MELON, DropRarity.RARE, "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.MELON, DropRarity.CRAZY_RARE, "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§[a|9]Enchanted Melon(?: Block)?§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.MELON, DropRarity.PRAY_TO_RNGESUS, "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§9(\\d+)x §r§9Enchanted Melon Block§r§e!".toRegex())) - - itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.UNCOMMON, "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.RARE, "§9§lRARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.CRAZY_RARE, "§d§lCRAZY RARE DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Pumpkin§r§e!".toRegex())) - itemDrops.add(ItemDrop(CropType.PUMPKIN, DropRarity.PRAY_TO_RNGESUS, "§5§lPRAY TO RNGESUS DROP! §r§eDicer dropped §r§[a|9](\\d+)x §r§(aEnchanted|9Polished) Pumpkin§r§e!".toRegex())) - } - - private fun initDrops() { - drops[CropType.MELON] = mutableMapOf() - drops[CropType.PUMPKIN] = mutableMapOf() - } - - enum class DropRarity(val displayName: String) { - UNCOMMON("§a§lUNCOMMON DROP"), - RARE("§9§lRARE DROP"), - CRAZY_RARE("§d§lCRAZY RARE DROP"), - PRAY_TO_RNGESUS("§5§lPRAY TO RNGESUS DROP"), - } - - @SubscribeEvent - fun onPreProfileSwitch(event: PreProfileSwitchEvent) { - display = emptyList() - drops.clear() - initDrops() - } - - @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - if (!GardenAPI.inGarden()) return - if (!config.hideChat && !config.display) return - - val message = event.message - for (drop in itemDrops) { - if (drop.pattern.matches(message)) { - addDrop(drop.crop, drop.rarity) - saveConfig() - update() - if (config.hideChat) { - event.blockedReason = "dicer_rng_drop_counter" - } - return - } - } - } - - private fun update() { - display = drawDisplay() - } - - private fun drawDisplay(): List { - val help = mutableListOf() - val items = drops[cropInHand] ?: return help - help.add("§7RNG Drops for $toolName§7:") - for ((rarity, amount) in items.sortedDesc()) { - val displayName = rarity.displayName - help.add(" §7- §e${amount.addSeparators()}x $displayName") - } - - return help - } - - private var cropInHand: CropType? = null - private var toolName = "" - - @SubscribeEvent - fun onGardenToolChange(event: GardenToolChangeEvent) { - val crop = event.crop - cropInHand = if (crop == CropType.MELON || crop == CropType.PUMPKIN) crop else null - if (cropInHand != null) { - toolName = event.toolItem!!.name!! - } - update() - } - - private fun addDrop(crop: CropType, rarity: DropRarity) { - val map = drops[crop]!! - val old = map[rarity] ?: 0 - map[rarity] = old + 1 - } - - @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { - if (isEnabled()) { - config.pos.renderStrings(display, posLabel = "Dicer Counter") - } - } - - class ItemDrop(val crop: CropType, val rarity: DropRarity, val pattern: Regex) - - private fun saveConfig() { - val map = GardenAPI.storage?.dicerRngDrops ?: return - map.clear() - for (drop in drops) { - val crop = drop.key - for ((rarity, amount) in drop.value) { - map[crop.cropName + "." + rarity.name] = amount - } - } - } - - @SubscribeEvent - fun onConfigLoad(event: ConfigLoadEvent) { - val map = GardenAPI.storage?.dicerRngDrops ?: return - for ((internalName, amount) in map) { - val split = internalName.split(".") - val crop = CropType.getByName(split[0]) - val rarityName = split[1] - val rarity = DropRarity.valueOf(rarityName) - drops[crop]!![rarity] = amount - } - } - - fun isEnabled() = GardenAPI.inGarden() && config.display - - @SubscribeEvent - fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.move(3, "garden.dicerCounterDisplay", "garden.dicerCounters.display") - event.move(3, "garden.dicerCounterHideChat", "garden.dicerCounters.hideChat") - event.move(3, "garden.dicerCounterPos", "garden.dicerCounters.pos") - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 9db8553aa..7269797cb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -12,19 +12,23 @@ import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.LorenzUtils.afterChange import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.tracker.DisplayMode +import at.hannibal2.skyhanni.utils.tracker.SharedTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory import net.minecraft.entity.boss.BossStatus import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.concurrent.fixedRateTimer -class PowderTracker { +object PowderTracker { private val config get() = SkyHanniMod.feature.mining.powderTracker private var display = emptyList>() @@ -42,7 +46,6 @@ class PowderTracker { private val chestInfo = ResourceInfo(0L, 0L, 0, 0.0, mutableListOf()) private var doublePowder = false private var powderTimer = "" - private var currentDisplayMode = DisplayMode.TOTAL private var inventoryOpen = false private var currentSessionData = mutableMapOf() private val gemstones = listOf( @@ -87,7 +90,7 @@ class PowderTracker { fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return val msg = event.message - val both = currentLog() ?: return + val both = getSharedTracker() ?: return if (config.greatExplorerMaxed) { uncovered.matchMatcher(msg) { @@ -187,26 +190,25 @@ class PowderTracker { for (index in config.textFormat.get()) { add(map[index]) } + + if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { + addSessionResetButton("Powder Tracker", getSharedTracker()) { + saveAndUpdate() + } + } } private fun drawDisplay() = buildList> { addAsSingletonList("§b§lPowder Tracker") if (inventoryOpen) { - addSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == currentDisplayMode }, - onChange = { - currentDisplayMode = it - saveAndUpdate() - } - ) + addDisplayModeToggle { + saveAndUpdate() + } } else { addAsSingletonList("") } - val both = currentLog() ?: return@buildList - val display = both.get(currentDisplayMode) + val display = currentDisplay() ?: return@buildList val chestPerHour = format(chestInfo.perHour) addAsSingletonList("§d${display.totalChestPicked.addSeparators()} Total Chests Picked §7($chestPerHour/h)") @@ -262,13 +264,13 @@ class PowderTracker { val count = rewards.getOrDefault(reward, 0).addSeparators() addAsSingletonList("§b$count ${reward.displayName}") } - } private fun MutableList>.addPerHour( map: MutableMap, reward: PowderChestReward, - info: ResourceInfo) { + info: ResourceInfo + ) { val mithrilCount = map.getOrDefault(reward, 0).addSeparators() val mithrilPerHour = format(info.perHour) addAsSingletonList("§b$mithrilCount ${reward.displayName} §7($mithrilPerHour/h)") @@ -301,16 +303,14 @@ class PowderTracker { } private fun calculate(info: ResourceInfo, reward: PowderChestReward) { - val both = currentLog() ?: return - val display = both.get(currentDisplayMode) + val display = currentDisplay() ?: return val rewards = display.rewards info.estimated = 0 info.estimated += rewards.getOrDefault(reward, 0) } private fun calculateChest() { - val both = currentLog() ?: return - val display = both.get(currentDisplayMode) + val display = currentDisplay() ?: return chestInfo.estimated = 0 chestInfo.estimated += display.totalChestPicked } @@ -342,37 +342,23 @@ class PowderTracker { val perMin: MutableList ) - enum class DisplayMode(val displayName: String) { - TOTAL("Total"), - CURRENT("This Session"), - ; - } + private fun currentDisplay() = getSharedTracker()?.getCurrent() - private fun currentLog(): AbstractPowderTracker? { + private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return AbstractPowderTracker( + return SharedTracker( profileSpecific.powderTracker.getOrPut(0) { Storage.ProfileSpecific.PowderTracker() }, currentSessionData.getOrPut(0) { Storage.ProfileSpecific.PowderTracker() } ) } - class AbstractPowderTracker( - private val total: Storage.ProfileSpecific.PowderTracker, - private val currentSession: Storage.ProfileSpecific.PowderTracker, - ) { - - fun modify(modifyFunction: (Storage.ProfileSpecific.PowderTracker) -> Unit) { - modifyFunction(total) - modifyFunction(currentSession) - } + private fun isEnabled() = + LorenzUtils.inSkyBlock && LorenzUtils.skyBlockIsland == IslandType.CRYSTAL_HOLLOWS && config.enabled - fun get(displayMode: DisplayMode) = when (displayMode) { - DisplayMode.TOTAL -> total - DisplayMode.CURRENT -> currentSession + fun resetCommand(args: Array) { + TrackerUtils.resetCommand("Powder Tracker", "shresetpowdertracker", args, getSharedTracker()) { + saveAndUpdate() } } - - private fun isEnabled() = - LorenzUtils.inSkyBlock && LorenzUtils.skyBlockIsland == IslandType.CRYSTAL_HOLLOWS && config.enabled } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt index 2aebe7e57..71c990fc0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt @@ -33,6 +33,11 @@ import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson import at.hannibal2.skyhanni.utils.renderables.Renderable +import at.hannibal2.skyhanni.utils.tracker.DisplayMode +import at.hannibal2.skyhanni.utils.tracker.SharedTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton import com.google.common.cache.CacheBuilder import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory @@ -53,12 +58,10 @@ object SlayerItemProfitTracker { private val logger = LorenzLogger("slayer/item_profit_tracker") private var inventoryOpen = false private var lastClickDelay = 0L - private var currentDisplayMode = DisplayMode.TOTAL private var currentSessionData = mutableMapOf() private fun addSlayerCosts(price: Int) { - val itemLog = currentLog() ?: return - itemLog.modify { + getSharedTracker()?.modify { it.slayerSpawnCost += price } update() @@ -94,18 +97,14 @@ object SlayerItemProfitTracker { } private fun addMobKillCoins(coins: Int) { - val itemLog = currentLog() ?: return - - itemLog.modify { + getSharedTracker()?.modify { it.mobKillCoins += coins } update() } private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { - val itemLog = currentLog() ?: return - - itemLog.modify { + getSharedTracker()?.modify { val slayerItemProfit = it.items.getOrPut(internalName) { SlayerProfitList.SlayerItemProfit() } slayerItemProfit.timesDropped++ @@ -115,12 +114,13 @@ object SlayerItemProfitTracker { update() } - private fun currentLog(): AbstractSlayerProfitList? { - if (itemLogCategory == "") return null + private fun currentDisplay() = getSharedTracker()?.getCurrent() + private fun getSharedTracker(): SharedTracker? { + if (itemLogCategory == "") return null val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return AbstractSlayerProfitList( + return SharedTracker( profileSpecific.slayerProfitData.getOrPut(itemLogCategory) { SlayerProfitList() }, currentSessionData.getOrPut(itemLogCategory) { SlayerProfitList() } ) @@ -128,9 +128,7 @@ object SlayerItemProfitTracker { @SubscribeEvent fun onQuestComplete(event: SlayerQuestCompleteEvent) { - val itemLog = currentLog() ?: return - - itemLog.modify { + getSharedTracker()?.modify { it.slayerCompletedCount++ } @@ -202,20 +200,13 @@ object SlayerItemProfitTracker { } private fun drawDisplay() = buildList> { - val both = currentLog() ?: return@buildList - val itemLog = both.get(currentDisplayMode) + val itemLog = currentDisplay() ?: return@buildList addAsSingletonList("§e§l$itemLogCategory Profit Tracker") if (inventoryOpen) { - addSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == currentDisplayMode }, - onChange = { - currentDisplayMode = it - update() - } - ) + addDisplayModeToggle { + update() + } } var profit = 0.0 @@ -322,27 +313,13 @@ object SlayerItemProfitTracker { } ) } - if (inventoryOpen && currentDisplayMode == DisplayMode.CURRENT) { - addAsSingletonList( - Renderable.clickAndHover( - "§cReset session!", - listOf("§cThis will reset your", "§ccurrent session for", "§c$itemLogCategory"), - ) { - resetData(DisplayMode.CURRENT) - update() - }) + if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { + addSessionResetButton("$itemLogCategory Slayer", getSharedTracker()) { + update() + } } } - private fun resetData(displayMode: DisplayMode) { - val currentLog = currentLog() ?: return - val list = currentLog.get(displayMode) - list.items.clear() - list.mobKillCoins = 0 - list.slayerSpawnCost = 0 - list.slayerCompletedCount = 0 - } - private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { 0 -> internalName.getBazaarData()?.sellPrice ?: internalName.getPriceOrNull() ?: 0.0 1 -> internalName.getBazaarData()?.buyPrice ?: internalName.getPriceOrNull() ?: 0.0 @@ -361,53 +338,22 @@ object SlayerItemProfitTracker { update() } - config.pos.renderStringsAndItems(display, posLabel = "Slayer Item Profit Tracker") } - enum class DisplayMode(val displayName: String) { - TOTAL("Total"), - CURRENT("This Session"), - ; - } - - class AbstractSlayerProfitList( - private val total: SlayerProfitList, - private val currentSession: SlayerProfitList, - ) { - - fun modify(modifyFunction: (SlayerProfitList) -> Unit) { - modifyFunction(total) - modifyFunction(currentSession) - } - - fun get(displayMode: DisplayMode) = when (displayMode) { - DisplayMode.TOTAL -> total - DisplayMode.CURRENT -> currentSession - } - } - fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled fun clearProfitCommand(args: Array) { if (itemLogCategory == "") { LorenzUtils.chat( "§c[SkyHanni] No current slayer data found. " + - "Go to a slayer area and start the specific slayer type you want to reset the data of." + "Go to a slayer area and start the specific slayer type you want to reset the data of." ) return } - if (args.size == 1 && args[0].lowercase() == "confirm") { - resetData(DisplayMode.TOTAL) + TrackerUtils.resetCommand("$itemLogCategory Slayer", "shclearslayerprofits", args, getSharedTracker()) { update() - LorenzUtils.chat("§e[SkyHanni] You reset your $itemLogCategory slayer data!") - return } - - LorenzUtils.clickableChat( - "§e[SkyHanni] Are you sure you want to reset all your $itemLogCategory slayer data? Click here to confirm.", - "shclearslayerprofits confirm" - ) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt new file mode 100644 index 000000000..6c0e14439 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt @@ -0,0 +1,7 @@ +package at.hannibal2.skyhanni.utils.tracker + +enum class DisplayMode(val displayName: String) { + TOTAL("Total"), + CURRENT("This Session"), + ; +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt new file mode 100644 index 000000000..341600467 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt @@ -0,0 +1,18 @@ +package at.hannibal2.skyhanni.utils.tracker + +class SharedTracker( + private val total: T, + private val currentSession: T, +) { + fun modify(modifyFunction: (T) -> Unit) { + modifyFunction(total) + modifyFunction(currentSession) + } + + fun get(displayMode: DisplayMode) = when (displayMode) { + DisplayMode.TOTAL -> total + DisplayMode.CURRENT -> currentSession + } + + fun getCurrent() = get(TrackerUtils.currentDisplayMode) +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerData.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerData.kt new file mode 100644 index 000000000..3c4a8bbd0 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerData.kt @@ -0,0 +1,5 @@ +package at.hannibal2.skyhanni.utils.tracker + +abstract class TrackerData { + abstract fun reset() +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt new file mode 100644 index 000000000..c223f17e7 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt @@ -0,0 +1,62 @@ +package at.hannibal2.skyhanni.utils.tracker + +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector +import at.hannibal2.skyhanni.utils.renderables.Renderable + +object TrackerUtils { + var currentDisplayMode = DisplayMode.TOTAL + + fun MutableList>.addDisplayModeToggle(update: () -> Unit) { + addSelector( + "§7Display Mode: ", + getName = { type -> type.displayName }, + isCurrent = { it == currentDisplayMode }, + onChange = { + currentDisplayMode = it + update() + } + ) + } + + fun MutableList>.addSessionResetButton(name: String, data: SharedTracker<*>?, update: () -> Unit) { + addAsSingletonList( + Renderable.clickAndHover( + "§cReset session!", + listOf( + "§cThis will reset your", + "§ccurrent session for", + "§c$name" + ), + ) { + data?.get(DisplayMode.CURRENT)?.let { + reset(it) { + update() + } + } + }) + } + + fun resetCommand(name: String, command: String, args: Array, data: SharedTracker<*>?, update: () -> Unit) { + if (args.size == 1 && args[0].lowercase() == "confirm") { + reset(data?.get(DisplayMode.TOTAL)) { + update() + LorenzUtils.chat("§e[SkyHanni] You reset your $name data!") + } + return + } + + LorenzUtils.clickableChat( + "§e[SkyHanni] Are you sure you want to reset all your $name data? Click here to confirm.", + "$command confirm" + ) + } + + fun reset(data: TrackerData?, update: () -> Unit) { + data?.let { + it.reset() + update() + } + } +} -- cgit From 93e611096d64ffbdef45d01c14afb26a34d6b452 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Tue, 7 Nov 2023 00:49:01 +0000 Subject: Update getPlayerName() (#696) Update getPlayerName() #696 --- src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt index 08344c51b..272f0f7f9 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt @@ -112,7 +112,7 @@ object PartyAPI { partyMemberListPattern.matchMatcher(message.removeColor()) { for (name in group("names").split(" ● ")) { val playerName = name.replace(" ●", "").cleanPlayerName() - if (playerName == Minecraft.getMinecraft().thePlayer.name) continue + if (playerName == LorenzUtils.getPlayerName()) continue if (!partyMembers.contains(playerName)) partyMembers.add(playerName) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index d4f35c2d8..e6bc74e06 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -204,7 +204,7 @@ object LorenzUtils { fun getRawPlayerUuid() = Minecraft.getMinecraft().thePlayer.uniqueID - fun getPlayerName() = Minecraft.getMinecraft().thePlayer.name + fun getPlayerName(): String = Minecraft.getMinecraft().thePlayer.name fun MutableList>.addAsSingletonList(text: E) { add(Collections.singletonList(text)) -- cgit From 1962619beab935f96dfc2223e60176d2340067c8 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 01:50:21 +0100 Subject: code cleanup --- src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt index c223f17e7..cc2dab37f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt @@ -53,7 +53,7 @@ object TrackerUtils { ) } - fun reset(data: TrackerData?, update: () -> Unit) { + private fun reset(data: TrackerData?, update: () -> Unit) { data?.let { it.reset() update() -- cgit From 66659a7c56a8366ead36af522593019a35c251d3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 02:04:20 +0100 Subject: 0.21 Beta 20 --- CHANGELOG.md | 9 ++++++++- build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ff1ca07c..368bffb34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -154,6 +154,9 @@ + Added a GUI element to remind you while /shmouselock is enabled. - CalMWolfs + Make Crimson Isle Quest Item Helper only get amount needed. - NetheriteMiner + Change config order to alphabetical. - walker ++ Added commands /shresetpowdertracker and /shresetdicertracker to reset the Powder Tracker and Dicer Drop Tracker - hannibal2 ++ Added current session/total session switch for Dicer Drop Tracker. - hannibal2 ++ Added a button to reset the local session for Dicer Drop Tracker and for Powder Tracker. - hannibal2 ### Bug Fixes @@ -243,7 +246,7 @@ + Removed **Duplicate Hider**. + Hypixel now fixed the bug themselves and hides duplicate farming contests in the Jacob inventory. -#### Internal Changes +#### Technical Details + Add Repo TODOs to regex patterns. - walker + Moved many patterns from function scope to members. - hannibal2 @@ -268,6 +271,10 @@ over the border between two items. - hannibal2 + Using visitorDrops.visitorRarities directly from the config instead of accessing the local field. Hopefully this will prevent partial config resets in the future. - hannibal2 ++ Added a tracker API that can be used for all features in SkyHanni that currently track stuff that the user collects. - hannibal2 ++ Added the slayer profit tracker logic (command to reset, toggle between total view and session view, and button to delete session) to powder tracker and Dicer Drop Tracker. - hannibal2 ++ Added support for migrating parts of the player or session storage. - nea ++ Changed the config format for dicerRngDrops/dicerDropsTracker. - hannibal2 ## Version 0.20 diff --git a/build.gradle.kts b/build.gradle.kts index 004e1338b..2e2343a09 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.19" +version = "0.21.Beta.20" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 93342d26f..b31dbbc31 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -325,7 +325,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.19", + version = "0.21.Beta.20", ) class SkyHanniMod { @Mod.EventHandler -- cgit From bfd0e31ebb6d841b222369baf54f7955d13e85e9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:00:35 +0100 Subject: Fixed compatibility problems with ChatTriggers that caused flickering in the Estimated Item Value while Inside the NEU Profile Viewer. --- .../skyhanni/features/misc/items/EstimatedItemValue.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index c5b87eb20..b0eab9926 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -58,21 +58,24 @@ object EstimatedItemValue { if (!config.enabled) return if (Minecraft.getMinecraft().currentScreen is GuiProfileViewer) { - updateItem(event.itemStack) - if (!blockNextFrame && renderedItems < 2) { - tryRendering() + if (renderedItems == 0) { + updateItem(event.itemStack) } + tryRendering() renderedItems++ } } - // Workaround for NEU Profile Viewer bug where the ItemTooltipEvent gets called for two items when hovering over the border between two items. + /** + * Workaround for NEU Profile Viewer bug where the ItemTooltipEvent gets called for two items when hovering + * over the border between two items. + * Also fixes complications with ChatTriggers where they call the stack.getToolTips() method that causes the + * ItemTooltipEvent to getting triggered multiple times per frame. + */ private var renderedItems = 0 - private var blockNextFrame = false @SubscribeEvent fun onRenderOverlayGui(event: GuiRenderEvent.GuiOverlayRenderEvent) { - blockNextFrame = renderedItems > 1 renderedItems = 0 } -- cgit From 98b3ba954a6da32bcc1bfe08a9bf67c17c2bca7f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 19:56:09 +0100 Subject: Added SkyHanniTracker and used it in DicerDropTracker --- .../java/at/hannibal2/skyhanni/config/Storage.java | 14 +----- .../features/garden/farming/DicerDropTracker.kt | 51 ++++++++-------------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 47 ++++++++++++++++++++ 3 files changed, 68 insertions(+), 44 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 5c4ef3c63..82aa9a4cb 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity; import at.hannibal2.skyhanni.features.garden.CropAccessory; import at.hannibal2.skyhanni.features.garden.CropType; +import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker; import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops; import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems; import at.hannibal2.skyhanni.features.garden.visitor.VisitorReward; @@ -144,18 +145,7 @@ public class Storage { public CropAccessory savedCropAccessory = null; @Expose - public DicerDropTracker dicerDropTracker = new DicerDropTracker(); - - public static class DicerDropTracker extends TrackerData { - - public void reset() { - drops.clear(); - } - - @Expose - public Map> drops = new HashMap<>(); - - } + public DicerDropTracker.Data dicerDropTracker = new DicerDropTracker.Data(); @Expose public long informedAboutLowMatter = 0; diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt index a3b4f73cb..bc4655bbe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt @@ -3,8 +3,6 @@ package at.hannibal2.skyhanni.features.garden.farming import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigManager import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.config.Storage.ProfileSpecific.GardenStorage.DicerDropTracker -import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.GardenToolChangeEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent @@ -17,11 +15,9 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems -import at.hannibal2.skyhanni.utils.tracker.DisplayMode -import at.hannibal2.skyhanni.utils.tracker.SharedTracker -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData +import com.google.gson.annotations.Expose import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -30,8 +26,17 @@ object DicerDropTracker { private var display = emptyList>() private val itemDrops = mutableListOf() private val config get() = SkyHanniMod.feature.garden.dicerCounters - private val currentSessionData = DicerDropTracker() private var inventoryOpen = false + private val tracker = SkyHanniTracker("Dicer Drop Tracker", Data(), { it.garden.dicerDropTracker }) { update() } + + class Data : TrackerData() { + override fun reset() { + drops.clear() + } + + @Expose + var drops: MutableMap> = mutableMapOf() + } init { itemDrops.add(ItemDrop(CropType.MELON, DropRarity.UNCOMMON, "§a§lUNCOMMON DROP! §r§eDicer dropped §r§a(\\d+)x §r§aEnchanted Melon§r§e!".toRegex())) @@ -75,30 +80,22 @@ object DicerDropTracker { } private fun update() { - currentDisplay()?.let { + tracker.currentDisplay()?.let { display = drawDisplay(it) } } - private fun drawDisplay(storage: DicerDropTracker) = buildList> { + private fun drawDisplay(storage: Data) = buildList> { val cropInHand = cropInHand ?: return@buildList val items = storage.drops.getOrPut(cropInHand) { mutableMapOf() } addAsSingletonList("§7Dicer Drop Tracker for $toolName§7:") - if (inventoryOpen) { - addDisplayModeToggle { - update() - } - } + tracker.addDisplayModeToggle(this, inventoryOpen) for ((rarity, amount) in items.sortedDesc()) { val displayName = rarity.displayName addAsSingletonList(" §7- §e${amount.addSeparators()}x $displayName") } - if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { - addSessionResetButton("Dicer Drop Tracker", getSharedTracker()) { - update() - } - } + tracker.addSessionResetButton(this, inventoryOpen) } private var cropInHand: CropType? = null @@ -115,8 +112,7 @@ object DicerDropTracker { } private fun addDrop(crop: CropType, rarity: DropRarity) { - val sharedTracker = getSharedTracker() ?: return - sharedTracker.modify { + tracker.modify { val map = it.drops.getOrPut(crop) { mutableMapOf() } map.addOrPut(rarity, 1) } @@ -160,16 +156,7 @@ object DicerDropTracker { } } - private fun currentDisplay() = getSharedTracker()?.getCurrent() - - private fun getSharedTracker(): SharedTracker? { - val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return SharedTracker(profileSpecific.garden.dicerDropTracker, currentSessionData) - } - fun resetCommand(args: Array) { - TrackerUtils.resetCommand("Dicer Drop Tracker", "shresetdicertracker", args, getSharedTracker()) { - update() - } + tracker.resetCommand(args, "shresetdicertracker") } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt new file mode 100644 index 000000000..5e9181447 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -0,0 +1,47 @@ +package at.hannibal2.skyhanni.utils.tracker + +import at.hannibal2.skyhanni.config.Storage +import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle +import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton + +class SkyHanniTracker( + val name: String, + private val currentSessionData: Data, + val getStorage: (Storage.ProfileSpecific) -> Data, + val update: () -> Unit, +) { + + private fun getSharedTracker(): SharedTracker? { + val profileSpecific = ProfileStorageData.profileSpecific ?: return null + return SharedTracker(getStorage(profileSpecific), currentSessionData) + } + + fun addSessionResetButton(list: MutableList>, inventoryOpen: Boolean) { + if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { + list.addSessionResetButton(name, getSharedTracker()) { + update() + } + } + } + + fun addDisplayModeToggle(list: MutableList>, inventoryOpen: Boolean) { + if (inventoryOpen) { + list.addDisplayModeToggle { + update() + } + } + } + + fun currentDisplay() = getSharedTracker()?.getCurrent() + + fun resetCommand(args: Array, command: String) { + TrackerUtils.resetCommand(name, command, args, getSharedTracker()) { + update() + } + } + + fun modify(modifyFunction: (Data) -> Unit) { + getSharedTracker()?.modify(modifyFunction) + } +} -- cgit From f3fda2930fcada44f9dba2edbaaeeb0b72cbf325 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:02:20 +0100 Subject: Used SkyHanniTracker in DicerDropTracker and migrated the data to make it better readable. --- .../skyhanni/config/ConfigUpdaterMigrator.kt | 2 +- .../java/at/hannibal2/skyhanni/config/Storage.java | 18 +----- .../features/mining/powdertracker/PowderTracker.kt | 64 +++++++++++----------- 3 files changed, 34 insertions(+), 50 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index a290b9bf9..8bb3b7268 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -9,7 +9,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - val configVersion = 7 + val configVersion = 8 fun JsonElement.at(chain: List, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 82aa9a4cb..247792fb4 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -12,7 +12,7 @@ import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker; import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops; import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems; import at.hannibal2.skyhanni.features.garden.visitor.VisitorReward; -import at.hannibal2.skyhanni.features.mining.powdertracker.PowderChestReward; +import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker; import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker; import at.hannibal2.skyhanni.features.misc.visualwords.VisualWord; import at.hannibal2.skyhanni.features.rift.area.westvillage.KloonTerminal; @@ -304,21 +304,7 @@ public class Storage { } @Expose - public Map powderTracker = new HashMap<>(); - - public static class PowderTracker extends TrackerData { - - public void reset() { - rewards.clear(); - totalChestPicked = 0; - } - - @Expose - public int totalChestPicked = 0; - - @Expose - public Map rewards = new HashMap<>(); - } + public PowderTracker.Data powderTracker = new PowderTracker.Data(); @Expose public FrozenTreasureTracker frozenTreasureTracker = new FrozenTreasureTracker(); diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 7269797cb..82e9e05b7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -2,9 +2,7 @@ package at.hannibal2.skyhanni.features.mining.powdertracker import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.IslandType -import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent @@ -18,10 +16,10 @@ import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.tracker.DisplayMode -import at.hannibal2.skyhanni.utils.tracker.SharedTracker +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData import at.hannibal2.skyhanni.utils.tracker.TrackerUtils -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import com.google.gson.annotations.Expose import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory import net.minecraft.entity.boss.BossStatus @@ -47,7 +45,6 @@ object PowderTracker { private var doublePowder = false private var powderTimer = "" private var inventoryOpen = false - private var currentSessionData = mutableMapOf() private val gemstones = listOf( "Ruby" to "§c", "Sapphire" to "§b", @@ -68,6 +65,21 @@ object PowderTracker { } } + private val tracker = SkyHanniTracker("Powder Tracker", Data(), { it.powderTracker }) { saveAndUpdate() } + + class Data : TrackerData() { + override fun reset() { + rewards.clear() + totalChestPicked = 0 + } + + @Expose + var totalChestPicked = 0 + + @Expose + var rewards: MutableMap = mutableMapOf() + } + @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent) { if (!isEnabled()) return @@ -90,11 +102,10 @@ object PowderTracker { fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return val msg = event.message - val both = getSharedTracker() ?: return if (config.greatExplorerMaxed) { uncovered.matchMatcher(msg) { - both.modify { + tracker.modify { it.totalChestPicked += 1 } isGrinding = true @@ -103,7 +114,7 @@ object PowderTracker { } picked.matchMatcher(msg) { - both.modify { + tracker.modify { it.totalChestPicked += 1 } isGrinding = true @@ -115,7 +126,7 @@ object PowderTracker { for (reward in PowderChestReward.entries) { reward.pattern.matchMatcher(msg) { - both.modify { + tracker.modify { val count = it.rewards[reward] ?: 0 var amount = group("amount").formatNumber() if ((reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) && doublePowder) @@ -174,6 +185,10 @@ object PowderTracker { @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(2, "misc.powderTrackerConfig", "mining.powderTracker") + + event.move(8, "#profile.powderTracker", "#profile.powderTracker") { old -> + old.asJsonObject.get("0") + } } private fun saveAndUpdate() { @@ -192,23 +207,19 @@ object PowderTracker { } if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { - addSessionResetButton("Powder Tracker", getSharedTracker()) { - saveAndUpdate() - } + tracker.addSessionResetButton(this, inventoryOpen) } } private fun drawDisplay() = buildList> { addAsSingletonList("§b§lPowder Tracker") if (inventoryOpen) { - addDisplayModeToggle { - saveAndUpdate() - } + tracker.addDisplayModeToggle(this, inventoryOpen = true) } else { addAsSingletonList("") } - val display = currentDisplay() ?: return@buildList + val display = tracker.currentDisplay() ?: return@buildList val chestPerHour = format(chestInfo.perHour) addAsSingletonList("§d${display.totalChestPicked.addSeparators()} Total Chests Picked §7($chestPerHour/h)") @@ -303,14 +314,14 @@ object PowderTracker { } private fun calculate(info: ResourceInfo, reward: PowderChestReward) { - val display = currentDisplay() ?: return + val display = tracker.currentDisplay() ?: return val rewards = display.rewards info.estimated = 0 info.estimated += rewards.getOrDefault(reward, 0) } private fun calculateChest() { - val display = currentDisplay() ?: return + val display = tracker.currentDisplay() ?: return chestInfo.estimated = 0 chestInfo.estimated += display.totalChestPicked } @@ -342,23 +353,10 @@ object PowderTracker { val perMin: MutableList ) - private fun currentDisplay() = getSharedTracker()?.getCurrent() - - private fun getSharedTracker(): SharedTracker? { - val profileSpecific = ProfileStorageData.profileSpecific ?: return null - - return SharedTracker( - profileSpecific.powderTracker.getOrPut(0) { Storage.ProfileSpecific.PowderTracker() }, - currentSessionData.getOrPut(0) { Storage.ProfileSpecific.PowderTracker() } - ) - } - private fun isEnabled() = LorenzUtils.inSkyBlock && LorenzUtils.skyBlockIsland == IslandType.CRYSTAL_HOLLOWS && config.enabled fun resetCommand(args: Array) { - TrackerUtils.resetCommand("Powder Tracker", "shresetpowdertracker", args, getSharedTracker()) { - saveAndUpdate() - } + tracker.resetCommand(args, "shresetpowdertracker") } } -- cgit From ae84c3c74b346057bd6de389fa27094bec6ca9c0 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:20:32 +0100 Subject: added function renderDisplay to SkyHanniTracker, removed code duplication --- .../features/garden/farming/DicerDropTracker.kt | 15 +++-------- .../features/mining/powdertracker/PowderTracker.kt | 27 +++---------------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 31 ++++++++++++++++++---- 3 files changed, 32 insertions(+), 41 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt index bc4655bbe..659a6cc17 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt @@ -14,19 +14,15 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker import at.hannibal2.skyhanni.utils.tracker.TrackerData import com.google.gson.annotations.Expose -import net.minecraft.client.Minecraft -import net.minecraft.client.gui.inventory.GuiInventory import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object DicerDropTracker { private var display = emptyList>() private val itemDrops = mutableListOf() private val config get() = SkyHanniMod.feature.garden.dicerCounters - private var inventoryOpen = false private val tracker = SkyHanniTracker("Dicer Drop Tracker", Data(), { it.garden.dicerDropTracker }) { update() } class Data : TrackerData() { @@ -89,13 +85,13 @@ object DicerDropTracker { val cropInHand = cropInHand ?: return@buildList val items = storage.drops.getOrPut(cropInHand) { mutableMapOf() } addAsSingletonList("§7Dicer Drop Tracker for $toolName§7:") - tracker.addDisplayModeToggle(this, inventoryOpen) + tracker.addDisplayModeToggle(this) for ((rarity, amount) in items.sortedDesc()) { val displayName = rarity.displayName addAsSingletonList(" §7- §e${amount.addSeparators()}x $displayName") } - tracker.addSessionResetButton(this, inventoryOpen) + tracker.addSessionResetButton(this) } private var cropInHand: CropType? = null @@ -123,12 +119,7 @@ object DicerDropTracker { fun onRenderOverlay(event: GuiRenderEvent) { if (!isEnabled()) return - val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory - if (inventoryOpen != currentlyOpen) { - inventoryOpen = currentlyOpen - update() - } - config.pos.renderStringsAndItems(display, posLabel = "Dicer Drop Tracker") + tracker.renderDisplay(config.pos, display) } class ItemDrop(val crop: CropType, val rarity: DropRarity, val pattern: Regex) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 82e9e05b7..f5c56cc9a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -13,15 +13,10 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.afterChange import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber -import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher -import at.hannibal2.skyhanni.utils.tracker.DisplayMode import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker import at.hannibal2.skyhanni.utils.tracker.TrackerData -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils import com.google.gson.annotations.Expose -import net.minecraft.client.Minecraft -import net.minecraft.client.gui.inventory.GuiInventory import net.minecraft.entity.boss.BossStatus import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.concurrent.fixedRateTimer @@ -44,7 +39,6 @@ object PowderTracker { private val chestInfo = ResourceInfo(0L, 0L, 0, 0.0, mutableListOf()) private var doublePowder = false private var powderTimer = "" - private var inventoryOpen = false private val gemstones = listOf( "Ruby" to "§c", "Sapphire" to "§b", @@ -84,18 +78,9 @@ object PowderTracker { fun onRenderOverlay(event: GuiRenderEvent) { if (!isEnabled()) return - val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory - if (inventoryOpen != currentlyOpen) { - inventoryOpen = currentlyOpen - saveAndUpdate() - } - if (config.onlyWhenPowderGrinding && !isGrinding) return - config.position.renderStringsAndItems( - display, - posLabel = "Powder Chest Tracker" - ) + tracker.renderDisplay(config.position, display) } @SubscribeEvent @@ -206,18 +191,12 @@ object PowderTracker { add(map[index]) } - if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { - tracker.addSessionResetButton(this, inventoryOpen) - } + tracker.addSessionResetButton(this) } private fun drawDisplay() = buildList> { addAsSingletonList("§b§lPowder Tracker") - if (inventoryOpen) { - tracker.addDisplayModeToggle(this, inventoryOpen = true) - } else { - addAsSingletonList("") - } + tracker.addDisplayModeToggle(this, closedText = "") val display = tracker.currentDisplay() ?: return@buildList diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 5e9181447..a63a47706 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -1,23 +1,30 @@ package at.hannibal2.skyhanni.utils.tracker import at.hannibal2.skyhanni.config.Storage +import at.hannibal2.skyhanni.config.core.config.Position import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import net.minecraft.client.Minecraft +import net.minecraft.client.gui.inventory.GuiInventory class SkyHanniTracker( - val name: String, + private val name: String, private val currentSessionData: Data, - val getStorage: (Storage.ProfileSpecific) -> Data, - val update: () -> Unit, + private val getStorage: (Storage.ProfileSpecific) -> Data, + private val update: () -> Unit, ) { + private var inventoryOpen = false + private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null return SharedTracker(getStorage(profileSpecific), currentSessionData) } - fun addSessionResetButton(list: MutableList>, inventoryOpen: Boolean) { + fun addSessionResetButton(list: MutableList>) { if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { list.addSessionResetButton(name, getSharedTracker()) { update() @@ -25,11 +32,15 @@ class SkyHanniTracker( } } - fun addDisplayModeToggle(list: MutableList>, inventoryOpen: Boolean) { + fun addDisplayModeToggle(list: MutableList>, closedText: String? = null) { if (inventoryOpen) { list.addDisplayModeToggle { update() } + } else { + closedText?.let { + list.addAsSingletonList(it) + } } } @@ -44,4 +55,14 @@ class SkyHanniTracker( fun modify(modifyFunction: (Data) -> Unit) { getSharedTracker()?.modify(modifyFunction) } + + fun renderDisplay(position: Position, display: List>) { + val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory + if (inventoryOpen != currentlyOpen) { + inventoryOpen = currentlyOpen + update() + } + + position.renderStringsAndItems(display, posLabel = name) + } } -- cgit From 5b7b2203c4ddeb1c9d40aff578cfab61df87d293 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Tue, 7 Nov 2023 20:23:08 +0000 Subject: Internal Change: Cleanup ConfigUpdaterMigrator (#672) Refactor configVersion to const CONFIG_VERSION #672 --- .../at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt | 14 +++++++------- src/main/java/at/hannibal2/skyhanni/config/Features.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index 8bb3b7268..19b77abf3 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -9,7 +9,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - val configVersion = 8 + const val CONFIG_VERSION = 8 fun JsonElement.at(chain: List, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null @@ -39,8 +39,8 @@ object ConfigUpdaterMigrator { logger.log("Skipping move from $oldPath to $newPath ($since <= $oldVersion)") return } - if (since > configVersion) { - error("Illegally new version $since > $configVersion") + if (since > CONFIG_VERSION) { + error("Illegally new version $since > $CONFIG_VERSION") } if (since > oldVersion + 1) { logger.log("Skipping move from $oldPath to $newPath (will be done in another pass)") @@ -80,7 +80,7 @@ object ConfigUpdaterMigrator { } } - fun merge(a: JsonObject, b: JsonObject): Int { + private fun merge(a: JsonObject, b: JsonObject): Int { var c = 0 b.entrySet().forEach { val e = a.get(it.key) @@ -100,11 +100,11 @@ object ConfigUpdaterMigrator { fun fixConfig(config: JsonObject): JsonObject { val lV = (config.get("lastVersion") as? JsonPrimitive)?.asIntOrNull ?: -1 - if (lV > configVersion) { + if (lV > CONFIG_VERSION) { error("Cannot downgrade config") } - if (lV == configVersion) return config - return (lV until configVersion).fold(config) { acc, i -> + if (lV == CONFIG_VERSION) return config + return (lV until CONFIG_VERSION).fold(config) { acc, i -> logger.log("Starting config transformation from $i to ${i + 1}") val storage = acc.get("storage")?.asJsonObject val dynamicPrefix: Map> = mapOf( diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java index ad7e5ab44..33d766fdf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Features.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java @@ -153,6 +153,6 @@ public class Features extends Config { public Storage storage = new Storage(); @Expose - public int lastVersion = ConfigUpdaterMigrator.INSTANCE.getConfigVersion(); + public int lastVersion = ConfigUpdaterMigrator.CONFIG_VERSION; } -- cgit From bc27a67c4495c8e4a37f559e1224ebfc0d649e80 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:50:26 +0100 Subject: Used SkyHanniTracker in SlayerItemProfitTracker --- .../java/at/hannibal2/skyhanni/config/Storage.java | 57 +-------- .../features/mining/powdertracker/PowderTracker.kt | 4 + .../features/slayer/SlayerItemProfitTracker.kt | 132 +++++++++++++-------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 3 +- 4 files changed, 88 insertions(+), 108 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 247792fb4..edab10936 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -16,9 +16,9 @@ import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker; import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker; import at.hannibal2.skyhanni.features.misc.visualwords.VisualWord; import at.hannibal2.skyhanni.features.rift.area.westvillage.KloonTerminal; +import at.hannibal2.skyhanni.features.slayer.SlayerItemProfitTracker; import at.hannibal2.skyhanni.utils.LorenzVec; import at.hannibal2.skyhanni.utils.NEUInternalName; -import at.hannibal2.skyhanni.utils.tracker.TrackerData; import com.google.gson.annotations.Expose; import net.minecraft.item.ItemStack; @@ -345,60 +345,7 @@ public class Storage { } @Expose - public Map slayerProfitData = new HashMap<>(); - - public static class SlayerProfitList extends TrackerData { - - public void reset() { - items.clear(); - mobKillCoins = 0; - slayerSpawnCost = 0; - slayerCompletedCount = 0; - } - - @Expose - public Map items = new HashMap<>(); - - @Expose - public long mobKillCoins = 0; - - @Expose - public long slayerSpawnCost = 0; - - @Expose - public int slayerCompletedCount = 0; - - public static class SlayerItemProfit { - @Expose - public NEUInternalName internalName; - @Expose - public long timesDropped; - @Expose - public long totalAmount; - @Expose - public boolean hidden; - - @Override - public String toString() { - return "SlayerItemProfit{" + - "internalName='" + internalName + '\'' + - ", timesDropped=" + timesDropped + - ", totalAmount=" + totalAmount + - ", hidden=" + hidden + - '}'; - } - } - - @Override - public String toString() { - return "SlayerProfitList{" + - "items=" + items + - ", mobKillCoins=" + mobKillCoins + - ", slayerSpawnCost=" + slayerSpawnCost + - ", slayerCompletedCount=" + slayerCompletedCount + - '}'; - } - } + public Map slayerProfitData = new HashMap<>(); @Expose public Map slayerRngMeter = new HashMap<>(); diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index f5c56cc9a..2f1999ea2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -198,6 +198,10 @@ object PowderTracker { addAsSingletonList("§b§lPowder Tracker") tracker.addDisplayModeToggle(this, closedText = "") + if (!tracker.isInventoryOpen()) { + addAsSingletonList("") + } + val display = tracker.currentDisplay() ?: return@buildList val chestPerHour = format(chestInfo.perHour) diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt index 71c990fc0..7c5cb5b6c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt @@ -1,8 +1,7 @@ package at.hannibal2.skyhanni.features.slayer import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.Storage.ProfileSpecific.SlayerProfitList -import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.PacketEvent @@ -28,19 +27,14 @@ import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson import at.hannibal2.skyhanni.utils.renderables.Renderable -import at.hannibal2.skyhanni.utils.tracker.DisplayMode -import at.hannibal2.skyhanni.utils.tracker.SharedTracker -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData import com.google.common.cache.CacheBuilder -import net.minecraft.client.Minecraft -import net.minecraft.client.gui.inventory.GuiInventory +import com.google.gson.annotations.Expose import net.minecraft.entity.item.EntityItem import net.minecraft.network.play.server.S0DPacketCollectItem import net.minecraftforge.fml.common.eventhandler.EventPriority @@ -55,13 +49,61 @@ object SlayerItemProfitTracker { private var itemLogCategory = "" private var baseSlayerType = "" private var display = emptyList>() - private val logger = LorenzLogger("slayer/item_profit_tracker") - private var inventoryOpen = false + private val logger = LorenzLogger("slayer/profit_tracker") private var lastClickDelay = 0L - private var currentSessionData = mutableMapOf() + private val trackers = mutableMapOf>() + + class Data : TrackerData() { + override fun reset() { + items.clear() + mobKillCoins = 0 + slayerSpawnCost = 0 + slayerCompletedCount = 0 + } + + @Expose + var items: MutableMap = HashMap() + + @Expose + var mobKillCoins: Long = 0 + + @Expose + var slayerSpawnCost: Long = 0 + + @Expose + var slayerCompletedCount = 0 + + class SlayerItemProfit { + @Expose + var internalName: NEUInternalName? = null + + @Expose + var timesDropped: Long = 0 + + @Expose + var totalAmount: Long = 0 + + @Expose + var hidden = false + + override fun toString() = "SlayerItemProfit{" + + "internalName='" + internalName + '\'' + + ", timesDropped=" + timesDropped + + ", totalAmount=" + totalAmount + + ", hidden=" + hidden + + '}' + } + + override fun toString() = "SlayerProfitList{" + + "items=" + items + + ", mobKillCoins=" + mobKillCoins + + ", slayerSpawnCost=" + slayerSpawnCost + + ", slayerCompletedCount=" + slayerCompletedCount + + '}' + } private fun addSlayerCosts(price: Int) { - getSharedTracker()?.modify { + getTracker()?.modify { it.slayerSpawnCost += price } update() @@ -97,15 +139,15 @@ object SlayerItemProfitTracker { } private fun addMobKillCoins(coins: Int) { - getSharedTracker()?.modify { + getTracker()?.modify { it.mobKillCoins += coins } update() } private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { - getSharedTracker()?.modify { - val slayerItemProfit = it.items.getOrPut(internalName) { SlayerProfitList.SlayerItemProfit() } + getTracker()?.modify { + val slayerItemProfit = it.items.getOrPut(internalName) { Data.SlayerItemProfit() } slayerItemProfit.timesDropped++ slayerItemProfit.totalAmount += stackSize @@ -114,21 +156,22 @@ object SlayerItemProfitTracker { update() } - private fun currentDisplay() = getSharedTracker()?.getCurrent() - - private fun getSharedTracker(): SharedTracker? { + private fun getTracker(): SkyHanniTracker? { if (itemLogCategory == "") return null - val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return SharedTracker( - profileSpecific.slayerProfitData.getOrPut(itemLogCategory) { SlayerProfitList() }, - currentSessionData.getOrPut(itemLogCategory) { SlayerProfitList() } - ) + return trackers.getOrPut(itemLogCategory) { + val getStorage: (Storage.ProfileSpecific) -> Data = { + it.slayerProfitData.getOrPut( + itemLogCategory + ) { Data() } + } + SkyHanniTracker("$itemLogCategory Profit Tracker", Data(), getStorage) { update() } + } } @SubscribeEvent fun onQuestComplete(event: SlayerQuestCompleteEvent) { - getSharedTracker()?.modify { + getTracker()?.modify { it.slayerCompletedCount++ } @@ -196,18 +239,15 @@ object SlayerItemProfitTracker { } fun update() { - display = drawDisplay() + val tracker = getTracker() ?: return + display = drawDisplay(tracker) } - private fun drawDisplay() = buildList> { - val itemLog = currentDisplay() ?: return@buildList + private fun drawDisplay(tracker: SkyHanniTracker) = buildList> { + val itemLog = tracker.currentDisplay() ?: return@buildList addAsSingletonList("§e§l$itemLogCategory Profit Tracker") - if (inventoryOpen) { - addDisplayModeToggle { - update() - } - } + tracker.addDisplayModeToggle(this) var profit = 0.0 val map = mutableMapOf() @@ -232,7 +272,7 @@ object SlayerItemProfitTracker { val percentage = timesDropped.toDouble() / itemLog.slayerCompletedCount val perBoss = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) - val renderable = if (inventoryOpen) Renderable.clickAndHover( + val renderable = if (tracker.isInventoryOpen()) Renderable.clickAndHover( text, listOf( "§7Dropped §e${timesDropped.addSeparators()} §7times.", "§7Your drop rate: §c$perBoss", @@ -254,7 +294,7 @@ object SlayerItemProfitTracker { update() } } else Renderable.string(text) - if (inventoryOpen || !hidden) { + if (tracker.isInventoryOpen() || !hidden) { map[renderable] = price } profit += price @@ -302,7 +342,7 @@ object SlayerItemProfitTracker { val text = "§eTotal Profit: $profitPrefix$profitFormat" addAsSingletonList(Renderable.hoverTips(text, listOf("§7Profit per boss: $profitPrefix$profitPerBossFormat"))) - if (inventoryOpen) { + if (tracker.isInventoryOpen()) { addSelector( "", getName = { type -> type.displayName }, @@ -313,11 +353,7 @@ object SlayerItemProfitTracker { } ) } - if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { - addSessionResetButton("$itemLogCategory Slayer", getSharedTracker()) { - update() - } - } + tracker.addSessionResetButton(this) } private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { @@ -332,13 +368,7 @@ object SlayerItemProfitTracker { if (!isEnabled()) return if (!SlayerAPI.isInCorrectArea) return - val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory - if (inventoryOpen != currentlyOpen) { - inventoryOpen = currentlyOpen - update() - } - - config.pos.renderStringsAndItems(display, posLabel = "Slayer Item Profit Tracker") + getTracker()?.renderDisplay(config.pos, display) } fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled @@ -352,8 +382,6 @@ object SlayerItemProfitTracker { return } - TrackerUtils.resetCommand("$itemLogCategory Slayer", "shclearslayerprofits", args, getSharedTracker()) { - update() - } + getTracker()?.resetCommand(args, "shclearslayerprofits") } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index a63a47706..4d7b74243 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -16,9 +16,10 @@ class SkyHanniTracker( private val getStorage: (Storage.ProfileSpecific) -> Data, private val update: () -> Unit, ) { - private var inventoryOpen = false + fun isInventoryOpen() = inventoryOpen + private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null return SharedTracker(getStorage(profileSpecific), currentSessionData) -- cgit From bd1c148c5cfeee0d2e5d7e3ed04498a496a435b6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:51:46 +0100 Subject: renamed SlayerItemProfitTracker to SlayerProfitTracker --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +- .../java/at/hannibal2/skyhanni/config/Storage.java | 4 +- .../hannibal2/skyhanni/config/commands/Commands.kt | 4 +- .../features/slayer/SlayerItemProfitTracker.kt | 387 --------------------- .../features/slayer/SlayerProfitTracker.kt | 387 +++++++++++++++++++++ 5 files changed, 393 insertions(+), 393 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index b31dbbc31..81a82904a 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -273,9 +273,9 @@ import at.hannibal2.skyhanni.features.rift.everywhere.motes.RiftMotesOrb import at.hannibal2.skyhanni.features.rift.everywhere.motes.ShowMotesNpcSellPrice import at.hannibal2.skyhanni.features.slayer.HideMobNames import at.hannibal2.skyhanni.features.slayer.SlayerBossSpawnSoon -import at.hannibal2.skyhanni.features.slayer.SlayerItemProfitTracker import at.hannibal2.skyhanni.features.slayer.SlayerItemsOnGround import at.hannibal2.skyhanni.features.slayer.SlayerMiniBossFeatures +import at.hannibal2.skyhanni.features.slayer.SlayerProfitTracker import at.hannibal2.skyhanni.features.slayer.SlayerQuestWarning import at.hannibal2.skyhanni.features.slayer.SlayerRngMeterDisplay import at.hannibal2.skyhanni.features.slayer.VampireSlayerFeatures @@ -554,7 +554,7 @@ class SkyHanniMod { loadModule(WarpTabComplete) loadModule(PlayerTabComplete) loadModule(GetFromSacksTabComplete) - loadModule(SlayerItemProfitTracker) + loadModule(SlayerProfitTracker) loadModule(SlayerItemsOnGround()) loadModule(RestorePieceOfWizardPortalLore()) loadModule(QuickModMenuSwitch) diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index edab10936..cf8bd827a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -16,7 +16,7 @@ import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker; import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker; import at.hannibal2.skyhanni.features.misc.visualwords.VisualWord; import at.hannibal2.skyhanni.features.rift.area.westvillage.KloonTerminal; -import at.hannibal2.skyhanni.features.slayer.SlayerItemProfitTracker; +import at.hannibal2.skyhanni.features.slayer.SlayerProfitTracker; import at.hannibal2.skyhanni.utils.LorenzVec; import at.hannibal2.skyhanni.utils.NEUInternalName; import com.google.gson.annotations.Expose; @@ -345,7 +345,7 @@ public class Storage { } @Expose - public Map slayerProfitData = new HashMap<>(); + public Map slayerProfitData = new HashMap<>(); @Expose public Map slayerRngMeter = new HashMap<>(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index c612a9742..47d267bbc 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -34,7 +34,7 @@ import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager import at.hannibal2.skyhanni.features.misc.discordrpc.DiscordRPCManager import at.hannibal2.skyhanni.features.misc.massconfiguration.DefaultConfigFeatures import at.hannibal2.skyhanni.features.misc.visualwords.VisualWordGui -import at.hannibal2.skyhanni.features.slayer.SlayerItemProfitTracker +import at.hannibal2.skyhanni.features.slayer.SlayerProfitTracker import at.hannibal2.skyhanni.test.PacketTest import at.hannibal2.skyhanni.test.SkyHanniConfigSearchResetCommand import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests @@ -151,7 +151,7 @@ object Commands { registerCommand( "shclearslayerprofits", "Clearing the total slayer profit for the current slayer type" - ) { SlayerItemProfitTracker.clearProfitCommand(it) } + ) { SlayerProfitTracker.clearProfitCommand(it) } registerCommand( "shimportghostcounterdata", "Manually importing the ghost counter data from GhostCounterV3" diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt deleted file mode 100644 index 7c5cb5b6c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemProfitTracker.kt +++ /dev/null @@ -1,387 +0,0 @@ -package at.hannibal2.skyhanni.features.slayer - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.Storage -import at.hannibal2.skyhanni.data.SlayerAPI -import at.hannibal2.skyhanni.events.GuiRenderEvent -import at.hannibal2.skyhanni.events.PacketEvent -import at.hannibal2.skyhanni.events.PurseChangeCause -import at.hannibal2.skyhanni.events.PurseChangeEvent -import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.events.SackChangeEvent -import at.hannibal2.skyhanni.events.SlayerChangeEvent -import at.hannibal2.skyhanni.events.SlayerQuestCompleteEvent -import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.getBazaarData -import at.hannibal2.skyhanni.test.PriceSource -import at.hannibal2.skyhanni.utils.EntityUtils -import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull -import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.KeyboardManager -import at.hannibal2.skyhanni.utils.LorenzLogger -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector -import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc -import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull -import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull -import at.hannibal2.skyhanni.utils.NumberUtil -import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.StringUtils -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson -import at.hannibal2.skyhanni.utils.renderables.Renderable -import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker -import at.hannibal2.skyhanni.utils.tracker.TrackerData -import com.google.common.cache.CacheBuilder -import com.google.gson.annotations.Expose -import net.minecraft.entity.item.EntityItem -import net.minecraft.network.play.server.S0DPacketCollectItem -import net.minecraftforge.fml.common.eventhandler.EventPriority -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit -import kotlin.time.Duration.Companion.seconds - -object SlayerItemProfitTracker { - private val config get() = SkyHanniMod.feature.slayer.itemProfitTracker - private var collectedCache = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build() - - private var itemLogCategory = "" - private var baseSlayerType = "" - private var display = emptyList>() - private val logger = LorenzLogger("slayer/profit_tracker") - private var lastClickDelay = 0L - private val trackers = mutableMapOf>() - - class Data : TrackerData() { - override fun reset() { - items.clear() - mobKillCoins = 0 - slayerSpawnCost = 0 - slayerCompletedCount = 0 - } - - @Expose - var items: MutableMap = HashMap() - - @Expose - var mobKillCoins: Long = 0 - - @Expose - var slayerSpawnCost: Long = 0 - - @Expose - var slayerCompletedCount = 0 - - class SlayerItemProfit { - @Expose - var internalName: NEUInternalName? = null - - @Expose - var timesDropped: Long = 0 - - @Expose - var totalAmount: Long = 0 - - @Expose - var hidden = false - - override fun toString() = "SlayerItemProfit{" + - "internalName='" + internalName + '\'' + - ", timesDropped=" + timesDropped + - ", totalAmount=" + totalAmount + - ", hidden=" + hidden + - '}' - } - - override fun toString() = "SlayerProfitList{" + - "items=" + items + - ", mobKillCoins=" + mobKillCoins + - ", slayerSpawnCost=" + slayerSpawnCost + - ", slayerCompletedCount=" + slayerCompletedCount + - '}' - } - - private fun addSlayerCosts(price: Int) { - getTracker()?.modify { - it.slayerSpawnCost += price - } - update() - } - - private var allowedItems = mapOf>() - - @SubscribeEvent - fun onRepoReload(event: RepositoryReloadEvent) { - allowedItems = event.getConstant("SlayerProfitTrackerItems").slayers - } - - @SubscribeEvent - fun onPurseChange(event: PurseChangeEvent) { - if (!isEnabled()) return - val coins = event.coins - if (event.reason == PurseChangeCause.GAIN_MOB_KILL && SlayerAPI.isInCorrectArea) { - logger.log("Coins gained for killing mobs: ${coins.addSeparators()}") - addMobKillCoins(coins.toInt()) - } - if (event.reason == PurseChangeCause.LOSE_SLAYER_QUEST_STARTED) { - logger.log("Coins paid for starting slayer quest: ${coins.addSeparators()}") - addSlayerCosts(coins.toInt()) - } - } - - @SubscribeEvent - fun onSlayerChange(event: SlayerChangeEvent) { - val newSlayer = event.newSlayer - itemLogCategory = newSlayer.removeColor() - baseSlayerType = itemLogCategory.substringBeforeLast(" ") - update() - } - - private fun addMobKillCoins(coins: Int) { - getTracker()?.modify { - it.mobKillCoins += coins - } - update() - } - - private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { - getTracker()?.modify { - val slayerItemProfit = it.items.getOrPut(internalName) { Data.SlayerItemProfit() } - - slayerItemProfit.timesDropped++ - slayerItemProfit.totalAmount += stackSize - } - - update() - } - - private fun getTracker(): SkyHanniTracker? { - if (itemLogCategory == "") return null - - return trackers.getOrPut(itemLogCategory) { - val getStorage: (Storage.ProfileSpecific) -> Data = { - it.slayerProfitData.getOrPut( - itemLogCategory - ) { Data() } - } - SkyHanniTracker("$itemLogCategory Profit Tracker", Data(), getStorage) { update() } - } - } - - @SubscribeEvent - fun onQuestComplete(event: SlayerQuestCompleteEvent) { - getTracker()?.modify { - it.slayerCompletedCount++ - } - - update() - } - - @SubscribeEvent - fun onSackChange(event: SackChangeEvent) { - if (!isEnabled()) return - if (!SlayerAPI.isInCorrectArea) return - if (!SlayerAPI.hasActiveSlayerQuest()) return - - for (sackChange in event.sackChanges) { - val change = sackChange.delta - if (change > 0) { - val internalName = sackChange.internalName - addItem(internalName, change) - } - } - } - - @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) - fun onChatPacket(event: PacketEvent.ReceiveEvent) { - if (!isEnabled()) return - if (!SlayerAPI.isInCorrectArea) return - if (!SlayerAPI.hasActiveSlayerQuest()) return - - val packet = event.packet - if (packet !is S0DPacketCollectItem) return - - val entityID = packet.collectedItemEntityID - val item = EntityUtils.getEntityByID(entityID) ?: return - if (item !is EntityItem) return - - if (collectedCache.getIfPresent(entityID) != null) return - collectedCache.put(entityID, Unit) - - val itemStack = item.entityItem - val name = itemStack.name ?: return - if (SlayerAPI.ignoreSlayerDrop(name)) return - val internalName = itemStack.getInternalNameOrNull() ?: return - addItem(internalName, itemStack.stackSize) - } - - private fun addItem(internalName: NEUInternalName, amount: Int) { - if (!isAllowedItem(internalName)) { - LorenzUtils.debug("Ignored non-slayer item pickup: '$internalName' '$itemLogCategory'") - return - } - - val (itemName, price) = SlayerAPI.getItemNameAndPrice(internalName, amount) - addItemPickup(internalName, amount) - logger.log("Coins gained for picking up an item ($itemName) ${price.addSeparators()}") - if (config.priceInChat && price > config.minimumPrice) { - LorenzUtils.chat("§e[SkyHanni] §a+Slayer Drop§7: §r$itemName") - } - if (config.titleWarning && price > config.minimumPriceWarning) { - LorenzUtils.sendTitle("§a+ $itemName", 5.seconds) - } - } - - private fun isAllowedItem(internalName: NEUInternalName): Boolean { - val allowedList = allowedItems[baseSlayerType] ?: return false - return internalName in allowedList - } - - fun update() { - val tracker = getTracker() ?: return - display = drawDisplay(tracker) - } - - private fun drawDisplay(tracker: SkyHanniTracker) = buildList> { - val itemLog = tracker.currentDisplay() ?: return@buildList - - addAsSingletonList("§e§l$itemLogCategory Profit Tracker") - tracker.addDisplayModeToggle(this) - - var profit = 0.0 - val map = mutableMapOf() - for ((internalName, itemProfit) in itemLog.items) { - val amount = itemProfit.totalAmount - - val price = (getPrice(internalName) * amount).toLong() - - val cleanName = SlayerAPI.getNameWithEnchantmentFor(internalName) - var name = cleanName - val priceFormat = NumberUtil.format(price) - val hidden = itemProfit.hidden - if (hidden) { - while (name.startsWith("§f")) { - name = name.substring(2) - } - name = StringUtils.addFormat(name, "§m") - } - val text = " §7${amount.addSeparators()}x $name§7: §6$priceFormat" - - val timesDropped = itemProfit.timesDropped - val percentage = timesDropped.toDouble() / itemLog.slayerCompletedCount - val perBoss = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) - - val renderable = if (tracker.isInventoryOpen()) Renderable.clickAndHover( - text, listOf( - "§7Dropped §e${timesDropped.addSeparators()} §7times.", - "§7Your drop rate: §c$perBoss", - "", - "§eClick to " + (if (hidden) "show" else "hide") + "!", - "§eControl + Click to remove this item!", - ) - ) { - if (System.currentTimeMillis() > lastClickDelay + 150) { - - if (KeyboardManager.isControlKeyDown()) { - itemLog.items.remove(internalName) - LorenzUtils.chat("§e[SkyHanni] Removed $cleanName §efrom slayer profit display.") - lastClickDelay = System.currentTimeMillis() + 500 - } else { - itemProfit.hidden = !hidden - lastClickDelay = System.currentTimeMillis() - } - update() - } - } else Renderable.string(text) - if (tracker.isInventoryOpen() || !hidden) { - map[renderable] = price - } - profit += price - } - val mobKillCoins = itemLog.mobKillCoins - if (mobKillCoins != 0L) { - val mobKillCoinsFormat = NumberUtil.format(mobKillCoins) - map[Renderable.hoverTips( - " §7Mob kill coins: §6$mobKillCoinsFormat", - listOf( - "§7Killing mobs gives you coins (more with scavenger)", - "§7You got §e$mobKillCoinsFormat §7coins in total this way" - ) - )] = mobKillCoins - profit += mobKillCoins - } - val slayerSpawnCost = itemLog.slayerSpawnCost - if (slayerSpawnCost != 0L) { - val mobKillCoinsFormat = NumberUtil.format(slayerSpawnCost) - map[Renderable.hoverTips( - " §7Slayer Spawn Costs: §c$mobKillCoinsFormat", - listOf("§7You paid §c$mobKillCoinsFormat §7in total", "§7for starting the slayer quests.") - )] = slayerSpawnCost - profit += slayerSpawnCost - } - - for (text in map.sortedDesc().keys) { - addAsSingletonList(text) - } - - val slayerCompletedCount = itemLog.slayerCompletedCount - addAsSingletonList( - Renderable.hoverTips( - "§7Bosses killed: §e${slayerCompletedCount.addSeparators()}", - listOf("§7You killed the $itemLogCategory boss", "§e${slayerCompletedCount.addSeparators()} §7times.") - ) - ) - - val profitFormat = NumberUtil.format(profit) - val profitPrefix = if (profit < 0) "§c" else "§6" - - val profitPerBoss = profit / itemLog.slayerCompletedCount - val profitPerBossFormat = NumberUtil.format(profitPerBoss) - - val text = "§eTotal Profit: $profitPrefix$profitFormat" - addAsSingletonList(Renderable.hoverTips(text, listOf("§7Profit per boss: $profitPrefix$profitPerBossFormat"))) - - if (tracker.isInventoryOpen()) { - addSelector( - "", - getName = { type -> type.displayName }, - isCurrent = { it.ordinal == config.priceFrom }, - onChange = { - config.priceFrom = it.ordinal - update() - } - ) - } - tracker.addSessionResetButton(this) - } - - private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { - 0 -> internalName.getBazaarData()?.sellPrice ?: internalName.getPriceOrNull() ?: 0.0 - 1 -> internalName.getBazaarData()?.buyPrice ?: internalName.getPriceOrNull() ?: 0.0 - - else -> internalName.getNpcPriceOrNull() ?: 0.0 - } - - @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent) { - if (!isEnabled()) return - if (!SlayerAPI.isInCorrectArea) return - - getTracker()?.renderDisplay(config.pos, display) - } - - fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled - - fun clearProfitCommand(args: Array) { - if (itemLogCategory == "") { - LorenzUtils.chat( - "§c[SkyHanni] No current slayer data found. " + - "Go to a slayer area and start the specific slayer type you want to reset the data of." - ) - return - } - - getTracker()?.resetCommand(args, "shclearslayerprofits") - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt new file mode 100644 index 000000000..b5848a2d6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -0,0 +1,387 @@ +package at.hannibal2.skyhanni.features.slayer + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.Storage +import at.hannibal2.skyhanni.data.SlayerAPI +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.PacketEvent +import at.hannibal2.skyhanni.events.PurseChangeCause +import at.hannibal2.skyhanni.events.PurseChangeEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.events.SackChangeEvent +import at.hannibal2.skyhanni.events.SlayerChangeEvent +import at.hannibal2.skyhanni.events.SlayerQuestCompleteEvent +import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.getBazaarData +import at.hannibal2.skyhanni.test.PriceSource +import at.hannibal2.skyhanni.utils.EntityUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.KeyboardManager +import at.hannibal2.skyhanni.utils.LorenzLogger +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector +import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull +import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull +import at.hannibal2.skyhanni.utils.NumberUtil +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.StringUtils +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson +import at.hannibal2.skyhanni.utils.renderables.Renderable +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData +import com.google.common.cache.CacheBuilder +import com.google.gson.annotations.Expose +import net.minecraft.entity.item.EntityItem +import net.minecraft.network.play.server.S0DPacketCollectItem +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.seconds + +object SlayerProfitTracker { + private val config get() = SkyHanniMod.feature.slayer.itemProfitTracker + private var collectedCache = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build() + + private var itemLogCategory = "" + private var baseSlayerType = "" + private var display = emptyList>() + private val logger = LorenzLogger("slayer/profit_tracker") + private var lastClickDelay = 0L + private val trackers = mutableMapOf>() + + class Data : TrackerData() { + override fun reset() { + items.clear() + mobKillCoins = 0 + slayerSpawnCost = 0 + slayerCompletedCount = 0 + } + + @Expose + var items: MutableMap = HashMap() + + @Expose + var mobKillCoins: Long = 0 + + @Expose + var slayerSpawnCost: Long = 0 + + @Expose + var slayerCompletedCount = 0 + + class SlayerItemProfit { + @Expose + var internalName: NEUInternalName? = null + + @Expose + var timesDropped: Long = 0 + + @Expose + var totalAmount: Long = 0 + + @Expose + var hidden = false + + override fun toString() = "SlayerItemProfit{" + + "internalName='" + internalName + '\'' + + ", timesDropped=" + timesDropped + + ", totalAmount=" + totalAmount + + ", hidden=" + hidden + + '}' + } + + override fun toString() = "SlayerProfitList{" + + "items=" + items + + ", mobKillCoins=" + mobKillCoins + + ", slayerSpawnCost=" + slayerSpawnCost + + ", slayerCompletedCount=" + slayerCompletedCount + + '}' + } + + private fun addSlayerCosts(price: Int) { + getTracker()?.modify { + it.slayerSpawnCost += price + } + update() + } + + private var allowedItems = mapOf>() + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + allowedItems = event.getConstant("SlayerProfitTrackerItems").slayers + } + + @SubscribeEvent + fun onPurseChange(event: PurseChangeEvent) { + if (!isEnabled()) return + val coins = event.coins + if (event.reason == PurseChangeCause.GAIN_MOB_KILL && SlayerAPI.isInCorrectArea) { + logger.log("Coins gained for killing mobs: ${coins.addSeparators()}") + addMobKillCoins(coins.toInt()) + } + if (event.reason == PurseChangeCause.LOSE_SLAYER_QUEST_STARTED) { + logger.log("Coins paid for starting slayer quest: ${coins.addSeparators()}") + addSlayerCosts(coins.toInt()) + } + } + + @SubscribeEvent + fun onSlayerChange(event: SlayerChangeEvent) { + val newSlayer = event.newSlayer + itemLogCategory = newSlayer.removeColor() + baseSlayerType = itemLogCategory.substringBeforeLast(" ") + update() + } + + private fun addMobKillCoins(coins: Int) { + getTracker()?.modify { + it.mobKillCoins += coins + } + update() + } + + private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { + getTracker()?.modify { + val slayerItemProfit = it.items.getOrPut(internalName) { Data.SlayerItemProfit() } + + slayerItemProfit.timesDropped++ + slayerItemProfit.totalAmount += stackSize + } + + update() + } + + private fun getTracker(): SkyHanniTracker? { + if (itemLogCategory == "") return null + + return trackers.getOrPut(itemLogCategory) { + val getStorage: (Storage.ProfileSpecific) -> Data = { + it.slayerProfitData.getOrPut( + itemLogCategory + ) { Data() } + } + SkyHanniTracker("$itemLogCategory Profit Tracker", Data(), getStorage) { update() } + } + } + + @SubscribeEvent + fun onQuestComplete(event: SlayerQuestCompleteEvent) { + getTracker()?.modify { + it.slayerCompletedCount++ + } + + update() + } + + @SubscribeEvent + fun onSackChange(event: SackChangeEvent) { + if (!isEnabled()) return + if (!SlayerAPI.isInCorrectArea) return + if (!SlayerAPI.hasActiveSlayerQuest()) return + + for (sackChange in event.sackChanges) { + val change = sackChange.delta + if (change > 0) { + val internalName = sackChange.internalName + addItem(internalName, change) + } + } + } + + @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) + fun onChatPacket(event: PacketEvent.ReceiveEvent) { + if (!isEnabled()) return + if (!SlayerAPI.isInCorrectArea) return + if (!SlayerAPI.hasActiveSlayerQuest()) return + + val packet = event.packet + if (packet !is S0DPacketCollectItem) return + + val entityID = packet.collectedItemEntityID + val item = EntityUtils.getEntityByID(entityID) ?: return + if (item !is EntityItem) return + + if (collectedCache.getIfPresent(entityID) != null) return + collectedCache.put(entityID, Unit) + + val itemStack = item.entityItem + val name = itemStack.name ?: return + if (SlayerAPI.ignoreSlayerDrop(name)) return + val internalName = itemStack.getInternalNameOrNull() ?: return + addItem(internalName, itemStack.stackSize) + } + + private fun addItem(internalName: NEUInternalName, amount: Int) { + if (!isAllowedItem(internalName)) { + LorenzUtils.debug("Ignored non-slayer item pickup: '$internalName' '$itemLogCategory'") + return + } + + val (itemName, price) = SlayerAPI.getItemNameAndPrice(internalName, amount) + addItemPickup(internalName, amount) + logger.log("Coins gained for picking up an item ($itemName) ${price.addSeparators()}") + if (config.priceInChat && price > config.minimumPrice) { + LorenzUtils.chat("§e[SkyHanni] §a+Slayer Drop§7: §r$itemName") + } + if (config.titleWarning && price > config.minimumPriceWarning) { + LorenzUtils.sendTitle("§a+ $itemName", 5.seconds) + } + } + + private fun isAllowedItem(internalName: NEUInternalName): Boolean { + val allowedList = allowedItems[baseSlayerType] ?: return false + return internalName in allowedList + } + + fun update() { + val tracker = getTracker() ?: return + display = drawDisplay(tracker) + } + + private fun drawDisplay(tracker: SkyHanniTracker) = buildList> { + val itemLog = tracker.currentDisplay() ?: return@buildList + + addAsSingletonList("§e§l$itemLogCategory Profit Tracker") + tracker.addDisplayModeToggle(this) + + var profit = 0.0 + val map = mutableMapOf() + for ((internalName, itemProfit) in itemLog.items) { + val amount = itemProfit.totalAmount + + val price = (getPrice(internalName) * amount).toLong() + + val cleanName = SlayerAPI.getNameWithEnchantmentFor(internalName) + var name = cleanName + val priceFormat = NumberUtil.format(price) + val hidden = itemProfit.hidden + if (hidden) { + while (name.startsWith("§f")) { + name = name.substring(2) + } + name = StringUtils.addFormat(name, "§m") + } + val text = " §7${amount.addSeparators()}x $name§7: §6$priceFormat" + + val timesDropped = itemProfit.timesDropped + val percentage = timesDropped.toDouble() / itemLog.slayerCompletedCount + val perBoss = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) + + val renderable = if (tracker.isInventoryOpen()) Renderable.clickAndHover( + text, listOf( + "§7Dropped §e${timesDropped.addSeparators()} §7times.", + "§7Your drop rate: §c$perBoss", + "", + "§eClick to " + (if (hidden) "show" else "hide") + "!", + "§eControl + Click to remove this item!", + ) + ) { + if (System.currentTimeMillis() > lastClickDelay + 150) { + + if (KeyboardManager.isControlKeyDown()) { + itemLog.items.remove(internalName) + LorenzUtils.chat("§e[SkyHanni] Removed $cleanName §efrom slayer profit display.") + lastClickDelay = System.currentTimeMillis() + 500 + } else { + itemProfit.hidden = !hidden + lastClickDelay = System.currentTimeMillis() + } + update() + } + } else Renderable.string(text) + if (tracker.isInventoryOpen() || !hidden) { + map[renderable] = price + } + profit += price + } + val mobKillCoins = itemLog.mobKillCoins + if (mobKillCoins != 0L) { + val mobKillCoinsFormat = NumberUtil.format(mobKillCoins) + map[Renderable.hoverTips( + " §7Mob kill coins: §6$mobKillCoinsFormat", + listOf( + "§7Killing mobs gives you coins (more with scavenger)", + "§7You got §e$mobKillCoinsFormat §7coins in total this way" + ) + )] = mobKillCoins + profit += mobKillCoins + } + val slayerSpawnCost = itemLog.slayerSpawnCost + if (slayerSpawnCost != 0L) { + val mobKillCoinsFormat = NumberUtil.format(slayerSpawnCost) + map[Renderable.hoverTips( + " §7Slayer Spawn Costs: §c$mobKillCoinsFormat", + listOf("§7You paid §c$mobKillCoinsFormat §7in total", "§7for starting the slayer quests.") + )] = slayerSpawnCost + profit += slayerSpawnCost + } + + for (text in map.sortedDesc().keys) { + addAsSingletonList(text) + } + + val slayerCompletedCount = itemLog.slayerCompletedCount + addAsSingletonList( + Renderable.hoverTips( + "§7Bosses killed: §e${slayerCompletedCount.addSeparators()}", + listOf("§7You killed the $itemLogCategory boss", "§e${slayerCompletedCount.addSeparators()} §7times.") + ) + ) + + val profitFormat = NumberUtil.format(profit) + val profitPrefix = if (profit < 0) "§c" else "§6" + + val profitPerBoss = profit / itemLog.slayerCompletedCount + val profitPerBossFormat = NumberUtil.format(profitPerBoss) + + val text = "§eTotal Profit: $profitPrefix$profitFormat" + addAsSingletonList(Renderable.hoverTips(text, listOf("§7Profit per boss: $profitPrefix$profitPerBossFormat"))) + + if (tracker.isInventoryOpen()) { + addSelector( + "", + getName = { type -> type.displayName }, + isCurrent = { it.ordinal == config.priceFrom }, + onChange = { + config.priceFrom = it.ordinal + update() + } + ) + } + tracker.addSessionResetButton(this) + } + + private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { + 0 -> internalName.getBazaarData()?.sellPrice ?: internalName.getPriceOrNull() ?: 0.0 + 1 -> internalName.getBazaarData()?.buyPrice ?: internalName.getPriceOrNull() ?: 0.0 + + else -> internalName.getNpcPriceOrNull() ?: 0.0 + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent) { + if (!isEnabled()) return + if (!SlayerAPI.isInCorrectArea) return + + getTracker()?.renderDisplay(config.pos, display) + } + + fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled + + fun clearProfitCommand(args: Array) { + if (itemLogCategory == "") { + LorenzUtils.chat( + "§c[SkyHanni] No current slayer data found. " + + "Go to a slayer area and start the specific slayer type you want to reset the data of." + ) + return + } + + getTracker()?.resetCommand(args, "shclearslayerprofits") + } +} -- cgit From d59bf21b3b88a4ee49325403d4285c2a56b1810a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:57:41 +0100 Subject: removed member totalEnderArmor and optimized isEnderArmor logic --- .../combat/endernodetracker/EnderNodeTracker.kt | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index 7fb000766..4d336d326 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -29,7 +29,6 @@ class EnderNodeTracker { private val config get() = SkyHanniMod.feature.combat.enderNodeTracker private val storage get() = ProfileStorageData.profileSpecific?.enderNodeTracker - private var totalEnderArmor = 0 private var miteGelInInventory = 0 private var display = emptyList>() private var lootProfit = mapOf() @@ -61,7 +60,6 @@ class EnderNodeTracker { when { item == null -> return - isEnderArmor(item) -> totalEnderArmor++ item == "§cEndermite Nest" -> { storage.totalEndermiteNests++ } @@ -138,11 +136,6 @@ class EnderNodeTracker { config.textFormat.afterChange { update() } - val storage = storage ?: return - - totalEnderArmor = storage.lootCount.filter { isEnderArmor(it.key.displayName) } - .map { it.value } - .sum() update() } @@ -156,7 +149,7 @@ class EnderNodeTracker { val newProfit = mutableMapOf() storage.lootCount.forEach { (item, amount) -> - val price = if (isEnderArmor(item.displayName)) { + val price = if (isEnderArmor(item)) { 10_000.0 } else { (if (!LorenzUtils.noTradeMode) item.internalName.getPriceOrNull() else 0.0) @@ -177,13 +170,13 @@ class EnderNodeTracker { private fun isInTheEnd() = LorenzUtils.skyBlockArea == "The End" - private fun isEnderArmor(displayName: String?) = when (displayName) { - EnderNode.END_HELMET.displayName, - EnderNode.END_CHESTPLATE.displayName, - EnderNode.END_LEGGINGS.displayName, - EnderNode.END_BOOTS.displayName, - EnderNode.ENDER_NECKLACE.displayName, - EnderNode.ENDER_GAUNTLET.displayName -> true + private fun isEnderArmor(displayName: EnderNode) = when (displayName) { + EnderNode.END_HELMET, + EnderNode.END_CHESTPLATE, + EnderNode.END_LEGGINGS, + EnderNode.END_BOOTS, + EnderNode.ENDER_NECKLACE, + EnderNode.ENDER_GAUNTLET -> true else -> false } @@ -212,9 +205,11 @@ class EnderNodeTracker { addAsSingletonList("§b$count ${item.displayName} §7(§6$profit§7)") } addAsSingletonList(" ") + + val totalEnderArmor = calculateEnderArmor(storage) addAsSingletonList( "§b${totalEnderArmor.addSeparators()} §5Ender Armor " + - "§7(§6${format(totalEnderArmor * 10_000)}§7)" + "§7(§6${format(totalEnderArmor * 10_000)}§7)" ) for (item in EnderNode.entries.subList(11, 16)) { val count = (storage.lootCount[item] ?: 0).addSeparators() @@ -227,6 +222,11 @@ class EnderNodeTracker { addAsSingletonList("§f$c§7-§a$u§7-§9$r§7-§5$e§7-§6$l §fEnderman Pet §7(§6$profit§7)") } + private fun calculateEnderArmor(storage: Storage.ProfileSpecific.EnderNodeTracker) = + storage.lootCount.filter { isEnderArmor(it.key) } + .map { it.value } + .sum() + private fun formatDisplay(map: List>): List> { if (!ProfileStorageData.loaded) return emptyList() @@ -236,4 +236,4 @@ class EnderNodeTracker { } return newList } -} \ No newline at end of file +} -- cgit From 4c4a0f2dbd15dfc4afa92e3a4c5ca90c0465976f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:27:15 +0100 Subject: Added more Ender Node Tracker features. Added command /shresetendernodetracker to reset the full data, added session support and added button to reset the current session. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- .../java/at/hannibal2/skyhanni/config/Storage.java | 15 +--- .../hannibal2/skyhanni/config/commands/Commands.kt | 9 ++- .../combat/endernodetracker/EnderNodeTracker.kt | 80 +++++++++++++++------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 1 + 5 files changed, 66 insertions(+), 41 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 81a82904a..cd2a752d0 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -596,7 +596,7 @@ class SkyHanniMod { loadModule(BestiaryData) loadModule(KingTalismanHelper()) loadModule(HarpFeatures) - loadModule(EnderNodeTracker()) + loadModule(EnderNodeTracker) loadModule(CompactBestiaryChatMessage()) loadModule(WatchdogHider()) loadModule(AccountUpgradeReminder()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index cf8bd827a..75c9cde83 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config; import at.hannibal2.skyhanni.data.model.ComposterUpgrade; -import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNode; +import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNodeTracker; import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostData; import at.hannibal2.skyhanni.features.dungeon.DungeonAPI; import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; @@ -321,18 +321,7 @@ public class Storage { } @Expose - public EnderNodeTracker enderNodeTracker = new EnderNodeTracker(); - - public static class EnderNodeTracker { - @Expose - public int totalNodesMined = 0; - - @Expose - public int totalEndermiteNests = 0; - - @Expose - public Map lootCount = new HashMap<>(); - } + public EnderNodeTracker.Data enderNodeTracker = new EnderNodeTracker.Data(); @Expose public RiftStorage rift = new RiftStorage(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 47d267bbc..3933ed081 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.data.PartyAPI import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay import at.hannibal2.skyhanni.features.bingo.BingoNextStepHelper import at.hannibal2.skyhanni.features.chat.Translator +import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNodeTracker import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostUtil import at.hannibal2.skyhanni.features.commands.PartyCommands import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper @@ -161,8 +162,12 @@ object Commands { "Clear farming items saved for the Farming Fortune Guide" ) { clearFarmingItems() } registerCommand("shresetghostcounter", "Resets the ghost counter") { GhostUtil.reset() } - registerCommand("shresetpowdertracker", "Resets the powder tracker") { PowderTracker.resetCommand(it) } - registerCommand("shresetdicertracker", "Resets the dicer counter") { DicerDropTracker.resetCommand(it) } + registerCommand("shresetpowdertracker", "Resets the Powder Tracker") { PowderTracker.resetCommand(it) } + registerCommand("shresetdicertracker", "Resets the Dicer Drop Tracker") { DicerDropTracker.resetCommand(it) } + registerCommand( + "shresetendernodetracker", + "Resets the Ender Node Tracker" + ) { EnderNodeTracker.resetCommand(it) } registerCommand("shbingotoggle", "Toggle the bingo card display mode") { BingoCardDisplay.toggleCommand() } registerCommand( "shfarmingprofile", diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index 4d336d326..d73123c23 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -2,7 +2,6 @@ package at.hannibal2.skyhanni.features.combat.endernodetracker import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.ConfigLoadEvent @@ -14,20 +13,21 @@ import at.hannibal2.skyhanni.events.SackChangeEvent import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.afterChange -import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.format -import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData +import com.google.gson.annotations.Expose import io.github.moulberry.notenoughupdates.util.MinecraftExecutor import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -class EnderNodeTracker { +object EnderNodeTracker { private val config get() = SkyHanniMod.feature.combat.enderNodeTracker - private val storage get() = ProfileStorageData.profileSpecific?.enderNodeTracker private var miteGelInInventory = 0 private var display = emptyList>() @@ -36,6 +36,26 @@ class EnderNodeTracker { private val enderNodeRegex = Regex("""ENDER NODE!.+You found (\d+x )?§r(.+)§r§f!""") private val endermanRegex = Regex("""(RARE|PET) DROP! §r(.+) §r§b\(""") + private val tracker = SkyHanniTracker("Ender Node Tracker", Data(), { it.enderNodeTracker }) { update() } + + class Data : TrackerData() { + + override fun reset() { + totalNodesMined = 0 + totalEndermiteNests = 0 + lootCount.clear() + } + + @Expose + var totalNodesMined = 0 + + @Expose + var totalEndermiteNests = 0 + + @Expose + var lootCount: MutableMap = mutableMapOf() + } + @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!config.enabled) return @@ -46,11 +66,12 @@ class EnderNodeTracker { val message = event.message.trim() var item: String? = null var amount = 1 - val storage = storage ?: return // check whether the loot is from an ender node or an enderman enderNodeRegex.find(message)?.let { - storage.totalNodesMined++ + tracker.modify { storage -> + storage.totalNodesMined++ + } amount = it.groups[1]?.value?.substringBefore("x")?.toIntOrNull() ?: 1 item = it.groups[2]?.value } ?: endermanRegex.find(message)?.let { @@ -61,15 +82,16 @@ class EnderNodeTracker { when { item == null -> return item == "§cEndermite Nest" -> { - storage.totalEndermiteNests++ + tracker.modify { storage -> + storage.totalEndermiteNests++ + } } } // increment the count of the specific item found EnderNode.entries.find { it.displayName == item }?.let { - val old = storage.lootCount[it] ?: 0 - storage.lootCount = storage.lootCount.editCopy { - this[it] = old + amount + tracker.modify { storage -> + storage.lootCount.addOrPut(it, amount) } } update() @@ -89,15 +111,15 @@ class EnderNodeTracker { if (!config.enabled) return if (!ProfileStorageData.loaded) return if (!isInTheEnd()) return - val storage = storage ?: return val change = event.sackChanges .firstOrNull { it.internalName == EnderNode.MITE_GEL.internalName && it.delta > 0 } ?: return - val old = storage.lootCount[EnderNode.MITE_GEL] ?: 0 - storage.lootCount = storage.lootCount.editCopy { - this[EnderNode.MITE_GEL] = old + change.delta + + tracker.modify { storage -> + storage.lootCount.addOrPut(EnderNode.MITE_GEL, change.delta) } + update() } @@ -106,7 +128,6 @@ class EnderNodeTracker { if (!config.enabled) return if (!isInTheEnd()) return if (!ProfileStorageData.loaded) return - val storage = storage ?: return MinecraftExecutor.OnThread.execute { val newMiteGelInInventory = Minecraft.getMinecraft().thePlayer.inventory.mainInventory @@ -114,9 +135,8 @@ class EnderNodeTracker { .sumOf { it.stackSize } val change = newMiteGelInInventory - miteGelInInventory if (change > 0) { - val old = storage.lootCount[EnderNode.MITE_GEL] ?: 0 - storage.lootCount = storage.lootCount.editCopy { - this[EnderNode.MITE_GEL] = old + change + tracker.modify { storage -> + storage.lootCount.addOrPut(EnderNode.MITE_GEL, change) } update() } @@ -125,10 +145,11 @@ class EnderNodeTracker { } @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + fun onRenderOverlay(event: GuiRenderEvent) { if (!config.enabled) return if (!isInTheEnd()) return - config.position.renderStringsAndItems(display, posLabel = "Ender Node Tracker") + + tracker.renderDisplay(config.position, display) } @SubscribeEvent @@ -144,7 +165,7 @@ class EnderNodeTracker { event.move(2, "misc.enderNodeTracker", "combat.enderNodeTracker") } - private fun calculateProfit(storage: Storage.ProfileSpecific.EnderNodeTracker): Map { + private fun calculateProfit(storage: Data): Map { if (!ProfileStorageData.loaded) return emptyMap() val newProfit = mutableMapOf() @@ -163,7 +184,7 @@ class EnderNodeTracker { } private fun update() { - val storage = storage ?: return + val storage = tracker.currentDisplay() ?: return lootProfit = calculateProfit(storage) display = formatDisplay(drawDisplay(storage)) } @@ -190,10 +211,13 @@ class EnderNodeTracker { else -> null } - private fun drawDisplay(storage: Storage.ProfileSpecific.EnderNodeTracker) = buildList> { + private fun drawDisplay(storage: Data) = buildList> { if (!ProfileStorageData.loaded) return emptyList>() addAsSingletonList("§5§lEnder Node Tracker") + + tracker.addDisplayModeToggle(this) + addAsSingletonList("§d${storage.totalNodesMined.addSeparators()} Ender Nodes mined") addAsSingletonList("§6${format(lootProfit.values.sum())} Coins made") addAsSingletonList(" ") @@ -220,9 +244,11 @@ class EnderNodeTracker { val (c, u, r, e, l) = EnderNode.entries.subList(16, 21).map { (storage.lootCount[it] ?: 0).addSeparators() } val profit = format(EnderNode.entries.subList(16, 21).sumOf { lootProfit[it] ?: 0.0 }) addAsSingletonList("§f$c§7-§a$u§7-§9$r§7-§5$e§7-§6$l §fEnderman Pet §7(§6$profit§7)") + + tracker.addSessionResetButton(this) } - private fun calculateEnderArmor(storage: Storage.ProfileSpecific.EnderNodeTracker) = + private fun calculateEnderArmor(storage: Data) = storage.lootCount.filter { isEnderArmor(it.key) } .map { it.value } .sum() @@ -236,4 +262,8 @@ class EnderNodeTracker { } return newList } + + fun resetCommand(args: Array) { + tracker.resetCommand(args, "shresetendernodetracker") + } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 4d7b74243..6ff8febc7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -45,6 +45,7 @@ class SkyHanniTracker( } } + // rename fun currentDisplay() = getSharedTracker()?.getCurrent() fun resetCommand(args: Array, command: String) { -- cgit From e0ef36326d439cfb376a44d005d3b8c7299c634b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:27:55 +0100 Subject: code cleanup --- .../skyhanni/features/mining/powdertracker/PowderTracker.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 2f1999ea2..35f10ac26 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -299,14 +299,12 @@ object PowderTracker { private fun calculate(info: ResourceInfo, reward: PowderChestReward) { val display = tracker.currentDisplay() ?: return val rewards = display.rewards - info.estimated = 0 - info.estimated += rewards.getOrDefault(reward, 0) + info.estimated = rewards.getOrDefault(reward, 0) } private fun calculateChest() { val display = tracker.currentDisplay() ?: return - chestInfo.estimated = 0 - chestInfo.estimated += display.totalChestPicked + chestInfo.estimated = display.totalChestPicked.toLong() } private fun convert(roughCount: Long): Gem { -- cgit From fccea080f5b8eaf561e83dc62b84a3cd5ded5a8f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:54:04 +0100 Subject: Added more Armor Drop Tracker features. Added command /shresetarmordroptracker to reset the full data, added session support and added button to reset the current session. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +- .../java/at/hannibal2/skyhanni/config/Storage.java | 4 +- .../hannibal2/skyhanni/config/commands/Commands.kt | 5 + .../features/garden/farming/ArmorDropTracker.kt | 174 +++++++++++++++++++++ .../features/garden/farming/CropMoneyDisplay.kt | 2 +- .../features/garden/farming/FarmingArmorDrops.kt | 148 ------------------ .../skyhanni/utils/tracker/DisplayMode.kt | 2 +- .../skyhanni/utils/tracker/SharedTracker.kt | 4 +- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 5 +- .../skyhanni/utils/tracker/TrackerUtils.kt | 2 +- 10 files changed, 189 insertions(+), 161 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index cd2a752d0..ca743ed50 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -139,10 +139,10 @@ import at.hannibal2.skyhanni.features.garden.contest.JacobContestFFNeededDisplay import at.hannibal2.skyhanni.features.garden.contest.JacobContestStatsSummary import at.hannibal2.skyhanni.features.garden.contest.JacobContestTimeNeeded import at.hannibal2.skyhanni.features.garden.contest.JacobFarmingContestsInventory +import at.hannibal2.skyhanni.features.garden.farming.ArmorDropTracker import at.hannibal2.skyhanni.features.garden.farming.CropMoneyDisplay import at.hannibal2.skyhanni.features.garden.farming.CropSpeedMeter import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker -import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops import at.hannibal2.skyhanni.features.garden.farming.FarmingWeightDisplay import at.hannibal2.skyhanni.features.garden.farming.GardenBurrowingSporesNotifier import at.hannibal2.skyhanni.features.garden.farming.GardenCropMilestoneDisplay @@ -505,7 +505,7 @@ class SkyHanniMod { loadModule(JacobFarmingContestsInventory()) loadModule(GardenNextJacobContest) loadModule(WrongFungiCutterWarning()) - loadModule(FarmingArmorDrops()) + loadModule(ArmorDropTracker) loadModule(JoinCrystalHollows()) loadModule(CrystalHollowsNamesInCore()) loadModule(GardenVisitorColorNames) diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 75c9cde83..26fdd365a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -8,8 +8,8 @@ import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity; import at.hannibal2.skyhanni.features.garden.CropAccessory; import at.hannibal2.skyhanni.features.garden.CropType; +import at.hannibal2.skyhanni.features.garden.farming.ArmorDropTracker; import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker; -import at.hannibal2.skyhanni.features.garden.farming.FarmingArmorDrops; import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems; import at.hannibal2.skyhanni.features.garden.visitor.VisitorReward; import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker; @@ -160,7 +160,7 @@ public class Storage { public long nextSixthVisitorArrival = 0; @Expose - public Map farmArmorDrops = new HashMap<>(); + public ArmorDropTracker.Data armorDropTracker = new ArmorDropTracker.Data(); @Expose public Map composterUpgrades = new HashMap<>(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 3933ed081..c96dbab65 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -19,6 +19,7 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.features.garden.GardenCropTimeCommand import at.hannibal2.skyhanni.features.garden.GardenNextJacobContest import at.hannibal2.skyhanni.features.garden.composter.ComposterOverlay +import at.hannibal2.skyhanni.features.garden.farming.ArmorDropTracker import at.hannibal2.skyhanni.features.garden.farming.CropMoneyDisplay import at.hannibal2.skyhanni.features.garden.farming.CropSpeedMeter import at.hannibal2.skyhanni.features.garden.farming.DicerDropTracker @@ -168,6 +169,10 @@ object Commands { "shresetendernodetracker", "Resets the Ender Node Tracker" ) { EnderNodeTracker.resetCommand(it) } + registerCommand( + "shresetarmordroptracker", + "Resets the Armor Drop Tracker" + ) { ArmorDropTracker.resetCommand(it) } registerCommand("shbingotoggle", "Toggle the bingo card display mode") { BingoCardDisplay.toggleCommand() } registerCommand( "shfarmingprofile", diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt new file mode 100644 index 000000000..0d5bcbf19 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt @@ -0,0 +1,174 @@ +package at.hannibal2.skyhanni.features.garden.farming + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.events.ConfigLoadEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.PreProfileSwitchEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.features.garden.CropType +import at.hannibal2.skyhanni.features.garden.GardenAPI +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut +import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson +import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson.DropInfo +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData +import com.google.gson.JsonObject +import com.google.gson.annotations.Expose +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds + +object ArmorDropTracker { + private var display = emptyList>() + + private var hasArmor = false + private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern() + private val config get() = SkyHanniMod.feature.garden.farmingArmorDrop + + private val tracker = SkyHanniTracker("Armor Drop Tracker", Data(), { it.garden.armorDropTracker }) { update() } + + class Data : TrackerData() { + override fun reset() { + drops.clear() + } + + @Expose + var drops: MutableMap = mutableMapOf() + } + + enum class ArmorDropType(val dropName: String, val chatMessage: String) { + CROPIE("§9Cropie", "§6§lRARE CROP! §r§f§r§9Cropie §r§b(Armor Set Bonus)"), + SQUASH("§5Squash", "§6§lRARE CROP! §r§f§r§5Squash §r§b(Armor Set Bonus)"), + FERMENTO("§6Fermento", "§6§lRARE CROP! §r§f§r§6Fermento §r§b(Armor Set Bonus)"), + } + + @SubscribeEvent + fun onPreProfileSwitch(event: PreProfileSwitchEvent) { + display = emptyList() + hasArmor = false + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + for (dropType in ArmorDropType.entries) { + if (dropType.chatMessage == event.message) { + addDrop(dropType) + if (config.hideChat) { + event.blockedReason = "farming_armor_drops" + } + } + } + } + + private fun addDrop(drop: ArmorDropType) { + tracker.modify { + it.drops.addOrPut(drop, 1) + } + update() + } + + private fun update() { + display = drawDisplay() + } + + private fun drawDisplay() = buildList> { + val drops = tracker.currentDisplay()?.drops ?: return@buildList + + addAsSingletonList("§7RNG Drops for Farming Armor:") + tracker.addDisplayModeToggle(this) + for ((drop, amount) in drops.sortedDesc()) { + val dropName = drop.dropName + addAsSingletonList(" §7- §e${amount.addSeparators()}x $dropName") + } + + tracker.addSessionResetButton(this) + } + + @SubscribeEvent + fun onConfigLoad(event: ConfigLoadEvent) { + update() + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent) { + if (!GardenAPI.inGarden()) return + if (!config.enabled) return + if (!hasArmor) return + + tracker.renderDisplay(config.pos, display) + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!GardenAPI.inGarden()) return + if (!config.enabled) return + + if (event.isMod(30)) { + checkArmor() + } + } + + private fun checkArmor() { + val armorPieces = InventoryUtils.getArmor() + .mapNotNull { it?.getInternalName()?.asString() } + .count { armorPattern.matcher(it).matches() } + hasArmor = armorPieces > 1 + } + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant("ArmorDrops") + armorDropInfo = data.special_crops + } + + private var armorDropInfo = mapOf() + private var currentArmorDropChance = 0.0 + private var lastCalculationTime = SimpleTimeMark.farPast() + + fun getDropsPerHour(crop: CropType?): Double { + if (crop == null) return 0.0 + + if (lastCalculationTime.passedSince() > 5.seconds) { + lastCalculationTime = SimpleTimeMark.now() + + val armorDropName = crop.specialDropType + val armorName = armorDropInfo[armorDropName]?.armor_type ?: return 0.0 + val pieceCount = InventoryUtils.getArmor() + .mapNotNull { it?.getInternalName()?.asString() } + .count { it.contains(armorName) || it.contains("FERMENTO") } + + val dropRates = armorDropInfo[armorDropName]?.chance ?: return 0.0 + var dropRate = 0.0 + if (pieceCount > 0 && dropRates.size >= pieceCount) { + dropRate = dropRates[pieceCount - 1] + } + currentArmorDropChance = (dropRate * 60 * 60.0) / 100 + } + return currentArmorDropChance + } + + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(3, "garden.farmingArmorDropsEnabled", "garden.farmingArmorDrop.enabled") + event.move(3, "garden.farmingArmorDropsHideChat", "garden.farmingArmorDrop.hideChat") + event.move(3, "garden.farmingArmorDropsPos", "garden.farmingArmorDrop.pos") + + event.move(8, "#profile.garden.farmArmorDrops", "#profile.garden.armorDropTracker") { old -> + val new = JsonObject() + new.add("drops", old) + new + } + } + + fun resetCommand(args: Array) { + tracker.resetCommand(args, "shresetarmordroptracker") + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt index 0cc07f7e7..91abf10a4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt @@ -155,7 +155,7 @@ object CropMoneyDisplay { if (config.armor) { val amountPerHour = - it.multiplier * GardenCropSpeed.getRecentBPS() * FarmingArmorDrops.getDropsPerHour(it) + it.multiplier * GardenCropSpeed.getRecentBPS() * ArmorDropTracker.getDropsPerHour(it) extraArmorCoins = amountPerHour * it.specialDropType.asInternalName().getNpcPrice() } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt deleted file mode 100644 index 2617ad329..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt +++ /dev/null @@ -1,148 +0,0 @@ -package at.hannibal2.skyhanni.features.garden.farming - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.events.ConfigLoadEvent -import at.hannibal2.skyhanni.events.GuiRenderEvent -import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.LorenzTickEvent -import at.hannibal2.skyhanni.events.PreProfileSwitchEvent -import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.features.garden.CropType -import at.hannibal2.skyhanni.features.garden.GardenAPI -import at.hannibal2.skyhanni.utils.InventoryUtils -import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName -import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc -import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings -import at.hannibal2.skyhanni.utils.SimpleTimeMark -import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson -import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson.DropInfo -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import kotlin.time.Duration.Companion.seconds - -class FarmingArmorDrops { - private var display = emptyList() - private val storage get() = GardenAPI.storage - - private var hasArmor = false - private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern() - private val config get() = SkyHanniMod.feature.garden.farmingArmorDrop - - enum class ArmorDropType(val dropName: String, val chatMessage: String) { - CROPIE("§9Cropie", "§6§lRARE CROP! §r§f§r§9Cropie §r§b(Armor Set Bonus)"), - SQUASH("§5Squash", "§6§lRARE CROP! §r§f§r§5Squash §r§b(Armor Set Bonus)"), - FERMENTO("§6Fermento", "§6§lRARE CROP! §r§f§r§6Fermento §r§b(Armor Set Bonus)"), - } - - @SubscribeEvent - fun onPreProfileSwitch(event: PreProfileSwitchEvent) { - display = emptyList() - hasArmor = false - } - - @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - for (dropType in ArmorDropType.entries) { - if (dropType.chatMessage == event.message) { - addDrop(dropType) - if (config.hideChat) { - event.blockedReason = "farming_armor_drops" - } - } - } - } - - private fun addDrop(drop: ArmorDropType) { - val drops = storage?.farmArmorDrops ?: return - val old = drops[drop] ?: 0 - drops[drop] = old + 1 - update() - } - - private fun update() { - display = drawDisplay() - } - - private fun drawDisplay() = buildList { - val drops = storage?.farmArmorDrops ?: return@buildList - - add("§7RNG Drops for Farming Armor:") - for ((drop, amount) in drops.sortedDesc()) { - val dropName = drop.dropName - add(" §7- §e${amount.addSeparators()}x $dropName") - } - } - - @SubscribeEvent - fun onConfigLoad(event: ConfigLoadEvent) { - update() - } - - @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { - if (!GardenAPI.inGarden()) return - if (!config.enabled) return - if (!hasArmor) return - - config.pos.renderStrings(display, posLabel = "Farming Armor Drops") - } - - @SubscribeEvent - fun onTick(event: LorenzTickEvent) { - if (!GardenAPI.inGarden()) return - if (!config.enabled) return - - if (event.isMod(30)) { - checkArmor() - } - } - - private fun checkArmor() { - val armorPieces = InventoryUtils.getArmor() - .mapNotNull { it?.getInternalName()?.asString() } - .count { armorPattern.matcher(it).matches() } - hasArmor = armorPieces > 1 - } - - @SubscribeEvent - fun onRepoReload(event: RepositoryReloadEvent) { - val data = event.getConstant("ArmorDrops") - armorDropInfo = data.special_crops - } - - companion object { - var armorDropInfo = mapOf() - private var currentArmorDropChance = 0.0 - private var lastCalculationTime = SimpleTimeMark.farPast() - - fun getDropsPerHour(crop: CropType?): Double { - if (crop == null) return 0.0 - - if (lastCalculationTime.passedSince() > 5.seconds) { - lastCalculationTime = SimpleTimeMark.now() - - val armorDropName = crop.specialDropType - val armorName = armorDropInfo[armorDropName]?.armor_type ?: return 0.0 - val pieceCount = InventoryUtils.getArmor() - .mapNotNull { it?.getInternalName()?.asString() } - .count { it.contains(armorName) || it.contains("FERMENTO") } - - val dropRates = armorDropInfo[armorDropName]?.chance ?: return 0.0 - var dropRate = 0.0 - if (pieceCount > 0 && dropRates.size >= pieceCount) { - dropRate = dropRates[pieceCount - 1] - } - currentArmorDropChance = (dropRate * 60 * 60.0) / 100 - } - return currentArmorDropChance - } - } - - @SubscribeEvent - fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.move(3, "garden.farmingArmorDropsEnabled", "garden.farmingArmorDrop.enabled") - event.move(3, "garden.farmingArmorDropsHideChat", "garden.farmingArmorDrop.hideChat") - event.move(3, "garden.farmingArmorDropsPos", "garden.farmingArmorDrop.pos") - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt index 6c0e14439..55441953c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt @@ -2,6 +2,6 @@ package at.hannibal2.skyhanni.utils.tracker enum class DisplayMode(val displayName: String) { TOTAL("Total"), - CURRENT("This Session"), + SESSION("This Session"), ; } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt index 341600467..9b5ae1d90 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt @@ -11,8 +11,6 @@ class SharedTracker( fun get(displayMode: DisplayMode) = when (displayMode) { DisplayMode.TOTAL -> total - DisplayMode.CURRENT -> currentSession + DisplayMode.SESSION -> currentSession } - - fun getCurrent() = get(TrackerUtils.currentDisplayMode) } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 6ff8febc7..e1b4c42ad 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -26,7 +26,7 @@ class SkyHanniTracker( } fun addSessionResetButton(list: MutableList>) { - if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.CURRENT) { + if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.SESSION) { list.addSessionResetButton(name, getSharedTracker()) { update() } @@ -45,8 +45,7 @@ class SkyHanniTracker( } } - // rename - fun currentDisplay() = getSharedTracker()?.getCurrent() + fun currentDisplay() = getSharedTracker()?.get(TrackerUtils.currentDisplayMode) fun resetCommand(args: Array, command: String) { TrackerUtils.resetCommand(name, command, args, getSharedTracker()) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt index cc2dab37f..ec527c9e5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt @@ -30,7 +30,7 @@ object TrackerUtils { "§c$name" ), ) { - data?.get(DisplayMode.CURRENT)?.let { + data?.get(DisplayMode.SESSION)?.let { reset(it) { update() } -- cgit From 0f278dbc298769b47fd1c8eb58588aafbdcfb619 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:58:44 +0100 Subject: save displayMode per tracker and code cleanup --- .../features/mining/powdertracker/PowderTracker.kt | 2 +- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 26 ++++++++++++---------- .../skyhanni/utils/tracker/TrackerUtils.kt | 14 ------------ 3 files changed, 15 insertions(+), 27 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 35f10ac26..d808566a0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -196,7 +196,7 @@ object PowderTracker { private fun drawDisplay() = buildList> { addAsSingletonList("§b§lPowder Tracker") - tracker.addDisplayModeToggle(this, closedText = "") + tracker.addDisplayModeToggle(this) if (!tracker.isInventoryOpen()) { addAsSingletonList("") diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index e1b4c42ad..8af683b16 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -3,9 +3,8 @@ package at.hannibal2.skyhanni.utils.tracker import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.config.core.config.Position import at.hannibal2.skyhanni.data.ProfileStorageData -import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addDisplayModeToggle import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory @@ -17,6 +16,7 @@ class SkyHanniTracker( private val update: () -> Unit, ) { private var inventoryOpen = false + private var displayMode = DisplayMode.TOTAL fun isInventoryOpen() = inventoryOpen @@ -26,26 +26,28 @@ class SkyHanniTracker( } fun addSessionResetButton(list: MutableList>) { - if (inventoryOpen && TrackerUtils.currentDisplayMode == DisplayMode.SESSION) { + if (inventoryOpen && displayMode == DisplayMode.SESSION) { list.addSessionResetButton(name, getSharedTracker()) { update() } } } - fun addDisplayModeToggle(list: MutableList>, closedText: String? = null) { - if (inventoryOpen) { - list.addDisplayModeToggle { + fun addDisplayModeToggle(list: MutableList>) { + if (!inventoryOpen) return + + list.addSelector( + "§7Display Mode: ", + getName = { type -> type.displayName }, + isCurrent = { it == displayMode }, + onChange = { + displayMode = it update() } - } else { - closedText?.let { - list.addAsSingletonList(it) - } - } + ) } - fun currentDisplay() = getSharedTracker()?.get(TrackerUtils.currentDisplayMode) + fun currentDisplay() = getSharedTracker()?.get(displayMode) fun resetCommand(args: Array, command: String) { TrackerUtils.resetCommand(name, command, args, getSharedTracker()) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt index ec527c9e5..77074a4b6 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt @@ -2,23 +2,9 @@ package at.hannibal2.skyhanni.utils.tracker import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.renderables.Renderable object TrackerUtils { - var currentDisplayMode = DisplayMode.TOTAL - - fun MutableList>.addDisplayModeToggle(update: () -> Unit) { - addSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == currentDisplayMode }, - onChange = { - currentDisplayMode = it - update() - } - ) - } fun MutableList>.addSessionResetButton(name: String, data: SharedTracker<*>?, update: () -> Unit) { addAsSingletonList( -- cgit From cfc760103dc914d5b7456e9cffe06d30f396e029 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 23:07:53 +0100 Subject: code cleanup and better wording --- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 40 ++++++++++++++---- .../skyhanni/utils/tracker/TrackerUtils.kt | 48 ---------------------- 2 files changed, 32 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 8af683b16..6d0fcedb6 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -3,9 +3,11 @@ package at.hannibal2.skyhanni.utils.tracker import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.config.core.config.Position import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems -import at.hannibal2.skyhanni.utils.tracker.TrackerUtils.addSessionResetButton +import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory @@ -26,11 +28,19 @@ class SkyHanniTracker( } fun addSessionResetButton(list: MutableList>) { - if (inventoryOpen && displayMode == DisplayMode.SESSION) { - list.addSessionResetButton(name, getSharedTracker()) { - update() - } - } + if (!inventoryOpen || displayMode != DisplayMode.SESSION) return + + list.addAsSingletonList( + Renderable.clickAndHover( + "§cReset session!", + listOf( + "§cThis will reset your", + "§ccurrent session of", + "§c$name" + ), + ) { + reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") + }) } fun addDisplayModeToggle(list: MutableList>) { @@ -50,9 +60,15 @@ class SkyHanniTracker( fun currentDisplay() = getSharedTracker()?.get(displayMode) fun resetCommand(args: Array, command: String) { - TrackerUtils.resetCommand(name, command, args, getSharedTracker()) { - update() + if (args.size == 1 && args[0].lowercase() == "confirm") { + reset(DisplayMode.TOTAL, "§e[SkyHanni] Reset total $name!") + return } + + LorenzUtils.clickableChat( + "§e[SkyHanni] Are you sure you want to reset your total $name? Click here to confirm.", + "$command confirm" + ) } fun modify(modifyFunction: (Data) -> Unit) { @@ -68,4 +84,12 @@ class SkyHanniTracker( position.renderStringsAndItems(display, posLabel = name) } + + private fun reset(displayMode: DisplayMode, message: String) { + getSharedTracker()?.get(displayMode)?.let { + it.reset() + LorenzUtils.chat(message) + update() + } + } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt deleted file mode 100644 index 77074a4b6..000000000 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/TrackerUtils.kt +++ /dev/null @@ -1,48 +0,0 @@ -package at.hannibal2.skyhanni.utils.tracker - -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.renderables.Renderable - -object TrackerUtils { - - fun MutableList>.addSessionResetButton(name: String, data: SharedTracker<*>?, update: () -> Unit) { - addAsSingletonList( - Renderable.clickAndHover( - "§cReset session!", - listOf( - "§cThis will reset your", - "§ccurrent session for", - "§c$name" - ), - ) { - data?.get(DisplayMode.SESSION)?.let { - reset(it) { - update() - } - } - }) - } - - fun resetCommand(name: String, command: String, args: Array, data: SharedTracker<*>?, update: () -> Unit) { - if (args.size == 1 && args[0].lowercase() == "confirm") { - reset(data?.get(DisplayMode.TOTAL)) { - update() - LorenzUtils.chat("§e[SkyHanni] You reset your $name data!") - } - return - } - - LorenzUtils.clickableChat( - "§e[SkyHanni] Are you sure you want to reset all your $name data? Click here to confirm.", - "$command confirm" - ) - } - - private fun reset(data: TrackerData?, update: () -> Unit) { - data?.let { - it.reset() - update() - } - } -} -- cgit From 1374af98253decb917f6c1605b9a45ce822adc91 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 23:16:36 +0100 Subject: added support for different current sessions per profile. --- .../skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt | 2 +- .../skyhanni/features/garden/farming/ArmorDropTracker.kt | 2 +- .../skyhanni/features/garden/farming/DicerDropTracker.kt | 2 +- .../skyhanni/features/mining/powdertracker/PowderTracker.kt | 2 +- .../at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt | 8 ++++++-- 6 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index d73123c23..802e593e9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -36,7 +36,7 @@ object EnderNodeTracker { private val enderNodeRegex = Regex("""ENDER NODE!.+You found (\d+x )?§r(.+)§r§f!""") private val endermanRegex = Regex("""(RARE|PET) DROP! §r(.+) §r§b\(""") - private val tracker = SkyHanniTracker("Ender Node Tracker", Data(), { it.enderNodeTracker }) { update() } + private val tracker = SkyHanniTracker("Ender Node Tracker", { Data() }, { it.enderNodeTracker }) { update() } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt index 0d5bcbf19..3825040d0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt @@ -33,7 +33,7 @@ object ArmorDropTracker { private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern() private val config get() = SkyHanniMod.feature.garden.farmingArmorDrop - private val tracker = SkyHanniTracker("Armor Drop Tracker", Data(), { it.garden.armorDropTracker }) { update() } + private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker }) { update() } class Data : TrackerData() { override fun reset() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt index 659a6cc17..0d95ed0ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt @@ -23,7 +23,7 @@ object DicerDropTracker { private var display = emptyList>() private val itemDrops = mutableListOf() private val config get() = SkyHanniMod.feature.garden.dicerCounters - private val tracker = SkyHanniTracker("Dicer Drop Tracker", Data(), { it.garden.dicerDropTracker }) { update() } + private val tracker = SkyHanniTracker("Dicer Drop Tracker", { Data() }, { it.garden.dicerDropTracker }) { update() } class Data : TrackerData() { override fun reset() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index d808566a0..fa2506069 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -59,7 +59,7 @@ object PowderTracker { } } - private val tracker = SkyHanniTracker("Powder Tracker", Data(), { it.powderTracker }) { saveAndUpdate() } + private val tracker = SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { saveAndUpdate() } class Data : TrackerData() { override fun reset() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index b5848a2d6..7efaed3d3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -165,7 +165,7 @@ object SlayerProfitTracker { itemLogCategory ) { Data() } } - SkyHanniTracker("$itemLogCategory Profit Tracker", Data(), getStorage) { update() } + SkyHanniTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { update() } } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 6d0fcedb6..8d5b723df 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -13,20 +13,24 @@ import net.minecraft.client.gui.inventory.GuiInventory class SkyHanniTracker( private val name: String, - private val currentSessionData: Data, + private val createNewSession: () -> Data, private val getStorage: (Storage.ProfileSpecific) -> Data, private val update: () -> Unit, ) { private var inventoryOpen = false private var displayMode = DisplayMode.TOTAL + private val currentSessions = mutableMapOf() fun isInventoryOpen() = inventoryOpen private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return SharedTracker(getStorage(profileSpecific), currentSessionData) + return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) } + private fun getCurrentSession(profileSpecific: Storage.ProfileSpecific) = + currentSessions.getOrPut(profileSpecific) { createNewSession() } + fun addSessionResetButton(list: MutableList>) { if (!inventoryOpen || displayMode != DisplayMode.SESSION) return -- cgit From 973c70eb98bfb811ebce565b71d388eb948aa327 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 7 Nov 2023 23:20:52 +0100 Subject: code cleanup --- .../hannibal2/skyhanni/utils/tracker/DisplayMode.kt | 7 ------- .../hannibal2/skyhanni/utils/tracker/SharedTracker.kt | 16 ---------------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+), 23 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt deleted file mode 100644 index 55441953c..000000000 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/DisplayMode.kt +++ /dev/null @@ -1,7 +0,0 @@ -package at.hannibal2.skyhanni.utils.tracker - -enum class DisplayMode(val displayName: String) { - TOTAL("Total"), - SESSION("This Session"), - ; -} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt deleted file mode 100644 index 9b5ae1d90..000000000 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SharedTracker.kt +++ /dev/null @@ -1,16 +0,0 @@ -package at.hannibal2.skyhanni.utils.tracker - -class SharedTracker( - private val total: T, - private val currentSession: T, -) { - fun modify(modifyFunction: (T) -> Unit) { - modifyFunction(total) - modifyFunction(currentSession) - } - - fun get(displayMode: DisplayMode) = when (displayMode) { - DisplayMode.TOTAL -> total - DisplayMode.SESSION -> currentSession - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 8d5b723df..4cf1f8e5f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -96,4 +96,23 @@ class SkyHanniTracker( update() } } + + class SharedTracker(private val total: Data, private val currentSession: Data, ) { + fun modify(modifyFunction: (Data) -> Unit) { + modifyFunction(total) + modifyFunction(currentSession) + } + + fun get(displayMode: DisplayMode) = when (displayMode) { + DisplayMode.TOTAL -> total + DisplayMode.SESSION -> currentSession + } + } + + enum class DisplayMode(val displayName: String) { + TOTAL("Total"), + SESSION("This Session"), + ; + } + } -- cgit From f1930397ccfb9d953bbd93ace46508c487dd6579 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:06:16 +0100 Subject: Added option to change the Blaze Slayer Dagger GUI positons. --- .../skyhanni/config/core/config/Position.java | 16 ++++ .../skyhanni/config/features/SlayerConfig.java | 6 ++ .../slayer/blaze/BlazeSlayerDaggerHelper.kt | 103 ++++----------------- .../at/hannibal2/skyhanni/utils/RenderUtils.kt | 29 ++++-- 4 files changed, 59 insertions(+), 95 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java index 329bcd028..d8b2a7a99 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java +++ b/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java @@ -31,6 +31,8 @@ public class Position { private int y; @Expose private float scale = 1F; + @Expose + private boolean center = false; @Expose private boolean centerX; @@ -52,6 +54,15 @@ public class Position { this.scale = scale; } + public Position(int x, int y, float scale, boolean center) { + this.x = x; + this.y = y; + this.centerX = false; + this.centerY = true; + this.scale = scale; + this.center = center; + } + public Position(int x, int y, boolean centerX, boolean centerY) { this.x = x; this.y = y; @@ -65,6 +76,7 @@ public class Position { this.centerX = other.centerX; this.centerY = other.centerY; this.scale = other.getScale(); + this.center = other.isCenter(); } public float getEffectiveScale() { @@ -76,6 +88,10 @@ public class Position { return scale; } + public boolean isCenter() { + return center; + } + public void setScale(float newScale) { scale = Math.max(Math.min(10F, newScale), 0.1f); } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/SlayerConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/SlayerConfig.java index 6ca5ec984..1c0003eab 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/SlayerConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/SlayerConfig.java @@ -121,6 +121,12 @@ public class SlayerConfig { @ConfigEditorBoolean @FeatureToggle public boolean hideDaggerWarning = false; + + @Expose + public Position positionTop = new Position(-475, 173, 4.4f, true); + + @Expose + public Position positionBottom = new Position(-475, 230, 3.2f, true); } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt index ce892f31f..0e9b9f8ae 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.slayer.blaze import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.config.core.config.gui.GuiPositionEditor import at.hannibal2.skyhanni.data.ClickType import at.hannibal2.skyhanni.events.BlockClickEvent import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -12,23 +13,19 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LocationUtils import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NumberUtil.roundToPrecision +import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.StringUtils.matchRegex import at.hannibal2.skyhanni.utils.getLorenzVec -import io.github.moulberry.moulconfig.internal.TextRenderUtils import net.minecraft.client.Minecraft -import net.minecraft.client.gui.ScaledResolution -import net.minecraft.client.renderer.GlStateManager import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class BlazeSlayerDaggerHelper { + private val config get() = SkyHanniMod.feature.slayer.blazes.hellion private var clientSideClicked = false - private var textTopLeft = "" - private var textTopRight = "" - private var textBottomLeft = "" - private var textBottomRight = "" + private var textTop = "" + private var textBottom = "" private var lastDaggerCheck = 0L private var lastNearestCheck = 0L @@ -58,10 +55,8 @@ class BlazeSlayerDaggerHelper { return } - textTopLeft = "" - textTopRight = "" - textBottomLeft = "" - textBottomRight = "" + textTop = "" + textBottom = "" } private fun setDaggerText(holding: Dagger) { @@ -71,10 +66,8 @@ class BlazeSlayerDaggerHelper { val first = Dagger.entries[SkyHanniMod.feature.slayer.blazes.hellion.firstDagger] val second = first.other() - textTopLeft = format(holding, true, first) - textTopRight = format(holding, true, second) - textBottomLeft = format(holding, false, first) - textBottomRight = format(holding, false, second) + textTop = format(holding, true, first) + " " + format(holding, true, second) + textBottom = format(holding, false, first) + " " + format(holding, false, second) } private fun findNearest(): HellionShield? { @@ -194,7 +187,7 @@ class BlazeSlayerDaggerHelper { } private fun isEnabled(): Boolean { - return LorenzUtils.inSkyBlock && SkyHanniMod.feature.slayer.blazes.hellion.daggers + return LorenzUtils.inSkyBlock && config.daggers } @SubscribeEvent @@ -242,75 +235,13 @@ class BlazeSlayerDaggerHelper { @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return - if (textTopLeft.isEmpty()) return - - if (Minecraft.getMinecraft().currentScreen != null) return - - val scaledResolution = ScaledResolution(Minecraft.getMinecraft()) - val width = scaledResolution.scaledWidth - val height = scaledResolution.scaledHeight - - val sizeFactor = (width.toFloat() / 960f).roundToPrecision(3) - - GlStateManager.enableBlend() - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0) - val renderer = Minecraft.getMinecraft().fontRendererObj - - GlStateManager.pushMatrix() - GlStateManager.translate(((width / 2) / 1.18).toFloat(), (height / 3.8).toFloat(), 0.0f) - GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth( - textTopLeft, - renderer, - 0f, - 0f, - false, - (60f * sizeFactor).toInt(), - 0 - ) - GlStateManager.popMatrix() - - GlStateManager.pushMatrix() - GlStateManager.translate(((width / 2) * 1.18).toFloat(), (height / 3.8).toFloat(), 0.0f) - GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth( - textTopRight, - renderer, - 0f, - 0f, - false, - (60f * sizeFactor).toInt(), - 0 - ) - GlStateManager.popMatrix() - - GlStateManager.pushMatrix() - GlStateManager.translate(((width / 2) / 1.18).toFloat(), (height / 3.0).toFloat(), 0.0f) - GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth( - textBottomLeft, - renderer, - 0f, - 0f, - false, - (20f * sizeFactor).toInt(), - 0 - ) - GlStateManager.popMatrix() - - GlStateManager.pushMatrix() - GlStateManager.translate(((width / 2) * 1.18).toFloat(), (height / 3.0).toFloat(), 0.0f) - GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth( - textBottomRight, - renderer, - 0f, - 0f, - false, - (20f * sizeFactor).toInt(), - 0 - ) - GlStateManager.popMatrix() + + if (textTop == "") return + val currentScreen = Minecraft.getMinecraft().currentScreen + if (currentScreen != null && currentScreen !is GuiPositionEditor) return + + config.positionTop.renderString(textTop, posLabel = "Blaze Slayer Dagger Top") + config.positionBottom.renderString(textBottom, posLabel = "Blaze Slayer Dagger Bottom") } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 4a5754b6c..7e10b0351 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -303,7 +303,6 @@ object RenderUtils { val z = pos.z - player.lastTickPosZ + (pos.z - player.posZ - (pos.z - player.lastTickPosZ)) * partialTicks - //7 – 25 val translate = LorenzVec(x, y, z) @@ -353,7 +352,6 @@ object RenderUtils { return lastValue + (currentValue - lastValue) * multiplier } - fun Position.transform(): Pair { GlStateManager.translate(getAbsX().toFloat(), getAbsY().toFloat(), 0F) GlStateManager.scale(effectiveScale, effectiveScale, 1F) @@ -365,11 +363,11 @@ object RenderUtils { fun Position.renderString(string: String?, offsetX: Int = 0, offsetY: Int = 0, posLabel: String) { if (string == null) return if (string == "") return - val x = renderString0(string, offsetX, offsetY) + val x = renderString0(string, offsetX, offsetY, isCenter) GuiEditManager.add(this, posLabel, x, 10) } - private fun Position.renderString0(string: String?, offsetX: Int = 0, offsetY: Int = 0): Int { + private fun Position.renderString0(string: String?, offsetX: Int = 0, offsetY: Int = 0, centered: Boolean): Int { val display = "§f$string" GlStateManager.pushMatrix() transform() @@ -380,7 +378,16 @@ object RenderUtils { val y = offsetY GlStateManager.translate(x + 1.0, y + 1.0, 0.0) - renderer.drawStringWithShadow(display, 0f, 0f, 0) + + if (centered) { + val strLen: Int = renderer.getStringWidth(string) + val x2 = x - strLen / 2f + GL11.glTranslatef(x2, 0f, 0f) + renderer.drawStringWithShadow(display, 0f, 0f, 0) + GL11.glTranslatef(-x2, 0f, 0f) + } else { + renderer.drawStringWithShadow(display, 0f, 0f, 0) + } GlStateManager.popMatrix() @@ -394,7 +401,7 @@ object RenderUtils { var offsetY = 0 var longestX = 0 for (s in list) { - val x = renderString0(s, offsetY = offsetY) + val x = renderString0(s, offsetY = offsetY, centered = false) if (x > longestX) { longestX = x } @@ -756,7 +763,6 @@ object RenderUtils { return LorenzVec(x, y, z) } - fun drawFilledBoundingBox(aabb: AxisAlignedBB, c: Color, alphaMultiplier: Float = 1f) { GlStateManager.enableBlend() GlStateManager.disableLighting() @@ -927,7 +933,12 @@ object RenderUtils { GlStateManager.disableBlend() } - fun LorenzRenderWorldEvent.outlineTopFace(boundingBox: AxisAlignedBB, lineWidth: Int, colour: Color, depth: Boolean) { + fun LorenzRenderWorldEvent.outlineTopFace( + boundingBox: AxisAlignedBB, + lineWidth: Int, + colour: Color, + depth: Boolean + ) { val cornerOne = LorenzVec(boundingBox.minX, boundingBox.maxY, boundingBox.minZ) val cornerTwo = LorenzVec(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ) val cornerThree = LorenzVec(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ) @@ -1021,4 +1032,4 @@ object RenderUtils { GlStateManager.enableLighting() GlStateManager.enableDepth() } -} \ No newline at end of file +} -- cgit From e2c66f35470e824d2896998189a1abeed2fa659d Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:11:57 +0100 Subject: Fixed Quest Item Helper showing negative numbers. --- src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt index e87a3f63b..956572f91 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/QuestItemHelper.kt @@ -33,7 +33,7 @@ class QuestItemHelper { val have = InventoryUtils.countItemsInLowerInventory { it.name?.contains(questItem) == true } if (have >= need) break - val missingAmount = have - need + val missingAmount = need - have LorenzUtils.clickableChat( "§e[SkyHanni] Click here to grab x$missingAmount $questItem from sacks!", "gfs $questItem $missingAmount" -- cgit From b32a56fce987c8939aca56338fa5e6a1cf669736 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 8 Nov 2023 00:24:17 +0100 Subject: 0.21 Beta 21 --- CHANGELOG.md | 7 +++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 368bffb34..ea1c3e96d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -157,6 +157,10 @@ + Added commands /shresetpowdertracker and /shresetdicertracker to reset the Powder Tracker and Dicer Drop Tracker - hannibal2 + Added current session/total session switch for Dicer Drop Tracker. - hannibal2 + Added a button to reset the local session for Dicer Drop Tracker and for Powder Tracker. - hannibal2 ++ Added more features for Ender Node Tracker and Armor Drop Tracker. - hannibal2 + + Added session/display mode support, added a button to reset the current session, and added the commands /shresetendernodetracker and /shresetarmordroptracker to reset the full data. ++ Added support for different current sessions per profile for all new trackers: Ender Node, Armor Drop, Dicer Drop, Powder and Slayer Profit Tracker ++ Added the option to change the Blaze Slayer Dagger GUI positions. - hannibal2 ### Bug Fixes @@ -235,6 +239,8 @@ accidentally. - hannibal2 + Hopefully fixed resets of Visitor Drops stats. - hannibal2 + Fixed typo in The Art Of Peace. - walker ++ Fixed compatibility problems with ChatTriggers that caused flickering in the Estimated Item Value while inside the NEU Profile Viewer. - hannibal2 ++ Fixed Quest Item Helper showing negative numbers. - hannibal2 #### Config @@ -275,6 +281,7 @@ + Added the slayer profit tracker logic (command to reset, toggle between total view and session view, and button to delete session) to powder tracker and Dicer Drop Tracker. - hannibal2 + Added support for migrating parts of the player or session storage. - nea + Changed the config format for dicerRngDrops/dicerDropsTracker. - hannibal2 ++ Created SkyHanniTracker, the core API for working with tracker stuff. This should be used everywhere someday in the future. - hannibal2 ## Version 0.20 diff --git a/build.gradle.kts b/build.gradle.kts index 2e2343a09..7c86c21f0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.20" +version = "0.21.Beta.21" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index ca743ed50..a509f3c88 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -325,7 +325,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.20", + version = "0.21.Beta.21", ) class SkyHanniMod { @Mod.EventHandler -- cgit From d2d6162ce5830099418e85b69f02b958625ad6a7 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:53:32 +0100 Subject: Used SkyHanniTracker in FrozenTreasureTracker --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- .../java/at/hannibal2/skyhanni/config/Storage.java | 15 +---- .../hannibal2/skyhanni/config/commands/Commands.kt | 7 +- .../combat/endernodetracker/EnderNodeTracker.kt | 9 ++- .../jerry/frozentreasure/FrozenTreasureTracker.kt | 78 +++++++++++++++------- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 18 ++--- 6 files changed, 74 insertions(+), 55 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index a509f3c88..b4a9a1c12 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -560,7 +560,7 @@ class SkyHanniMod { loadModule(QuickModMenuSwitch) loadModule(ArachneChatMessageHider()) loadModule(ShowItemUuid()) - loadModule(FrozenTreasureTracker()) + loadModule(FrozenTreasureTracker) loadModule(SlayerRngMeterDisplay()) loadModule(GhostCounter) loadModule(RiftTimer()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/Storage.java index 26fdd365a..21a54735e 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/Storage.java @@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.data.model.ComposterUpgrade; import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNodeTracker; import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostData; import at.hannibal2.skyhanni.features.dungeon.DungeonAPI; -import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasure; +import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureTracker; import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity; import at.hannibal2.skyhanni.features.garden.CropAccessory; import at.hannibal2.skyhanni.features.garden.CropType; @@ -307,18 +307,7 @@ public class Storage { public PowderTracker.Data powderTracker = new PowderTracker.Data(); @Expose - public FrozenTreasureTracker frozenTreasureTracker = new FrozenTreasureTracker(); - - public static class FrozenTreasureTracker { - @Expose - public int treasuresMined = 0; - - @Expose - public int compactProcs = 0; - - @Expose - public Map treasureCount = new HashMap<>(); - } + public FrozenTreasureTracker.Data frozenTreasureTracker = new FrozenTreasureTracker.Data(); @Expose public EnderNodeTracker.Data enderNodeTracker = new EnderNodeTracker.Data(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index c96dbab65..89885ec4d 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostUtil import at.hannibal2.skyhanni.features.commands.PartyCommands import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper import at.hannibal2.skyhanni.features.event.diana.InquisitorWaypointShare +import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureTracker import at.hannibal2.skyhanni.features.fame.AccountUpgradeReminder import at.hannibal2.skyhanni.features.fame.CityProjectFeatures import at.hannibal2.skyhanni.features.garden.GardenAPI @@ -169,10 +170,8 @@ object Commands { "shresetendernodetracker", "Resets the Ender Node Tracker" ) { EnderNodeTracker.resetCommand(it) } - registerCommand( - "shresetarmordroptracker", - "Resets the Armor Drop Tracker" - ) { ArmorDropTracker.resetCommand(it) } + registerCommand("shresetarmordroptracker", "Resets the Armor Drop Tracker") { ArmorDropTracker.resetCommand(it) } + registerCommand("shresetfrozentreasuretracker", "Resets the Frozen Treasure Tracker") { FrozenTreasureTracker.resetCommand(it) } registerCommand("shbingotoggle", "Toggle the bingo card display mode") { BingoCardDisplay.toggleCommand() } registerCommand( "shfarmingprofile", diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index 802e593e9..1b10bf7eb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -215,9 +215,6 @@ object EnderNodeTracker { if (!ProfileStorageData.loaded) return emptyList>() addAsSingletonList("§5§lEnder Node Tracker") - - tracker.addDisplayModeToggle(this) - addAsSingletonList("§d${storage.totalNodesMined.addSeparators()} Ender Nodes mined") addAsSingletonList("§6${format(lootProfit.values.sum())} Coins made") addAsSingletonList(" ") @@ -244,8 +241,6 @@ object EnderNodeTracker { val (c, u, r, e, l) = EnderNode.entries.subList(16, 21).map { (storage.lootCount[it] ?: 0).addSeparators() } val profit = format(EnderNode.entries.subList(16, 21).sumOf { lootProfit[it] ?: 0.0 }) addAsSingletonList("§f$c§7-§a$u§7-§9$r§7-§5$e§7-§6$l §fEnderman Pet §7(§6$profit§7)") - - tracker.addSessionResetButton(this) } private fun calculateEnderArmor(storage: Data) = @@ -259,7 +254,11 @@ object EnderNodeTracker { val newList = mutableListOf>() for (index in config.textFormat.get()) { newList.add(map[index]) + if (newList.size == 1) { + tracker.addDisplayModeToggle(newList) + } } + tracker.addSessionResetButton(newList) return newList } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt index ee72bec69..fa10aa501 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt @@ -2,7 +2,6 @@ package at.hannibal2.skyhanni.features.event.jerry.frozentreasure import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.data.ScoreboardData @@ -11,17 +10,19 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy +import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker +import at.hannibal2.skyhanni.utils.tracker.TrackerData +import com.google.gson.annotations.Expose import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.concurrent.fixedRateTimer -class FrozenTreasureTracker { +object FrozenTreasureTracker { private val config get() = SkyHanniMod.feature.event.winter.frozenTreasureTracker private var display = emptyList>() private var estimatedIce = 0L @@ -30,6 +31,8 @@ class FrozenTreasureTracker { private var icePerHour = 0 private var stoppedChecks = 0 private var compactPattern = "COMPACT! You found an Enchanted Ice!".toPattern() + private val tracker = SkyHanniTracker("Frozen Treasure Tracker", { Data() }, { it.frozenTreasureTracker }) + { saveAndUpdate() } init { fixedRateTimer(name = "skyhanni-frozen-treasure-tracker", period = 1000) { @@ -38,6 +41,24 @@ class FrozenTreasureTracker { } } + class Data : TrackerData() { + + override fun reset() { + treasureCount.clear() + treasuresMined = 0 + compactProcs = 0 + } + + @Expose + var treasuresMined = 0 + + @Expose + var compactProcs = 0 + + @Expose + var treasureCount: MutableMap = mutableMapOf() + } + @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { icePerHour = 0 @@ -78,7 +99,11 @@ class FrozenTreasureTracker { val newList = mutableListOf>() for (index in config.textFormat) { newList.add(map[index]) + if (newList.size == 1) { + tracker.addDisplayModeToggle(newList) + } } + tracker.addSessionResetButton(newList) return newList } @@ -88,19 +113,21 @@ class FrozenTreasureTracker { if (!onJerryWorkshop()) return val message = event.message.removeColor().trim() - val storage = ProfileStorageData.profileSpecific?.frozenTreasureTracker ?: return compactPattern.matchMatcher(message) { - storage.compactProcs += 1 + tracker.modify { + it.compactProcs += 1 + } saveAndUpdate() if (config.hideMessages) event.blockedReason = "frozen treasure tracker" } for (treasure in FrozenTreasure.entries) { if ("FROZEN TREASURE! You found ${treasure.displayName.removeColor()}!".toRegex().matches(message)) { - storage.treasuresMined += 1 - val old = storage.treasureCount[treasure] ?: 0 - storage.treasureCount = storage.treasureCount.editCopy { this[treasure] = old + 1 } + tracker.modify { + it.treasuresMined += 1 + it.treasureCount.addOrPut(treasure, 1) + } saveAndUpdate() if (config.hideMessages) event.blockedReason = "frozen treasure tracker" } @@ -112,16 +139,16 @@ class FrozenTreasureTracker { display = emptyList() } - private fun drawTreasureDisplay(storage: Storage.ProfileSpecific.FrozenTreasureTracker) = buildList> { + private fun drawTreasureDisplay(data: Data) = buildList> { addAsSingletonList("§1§lFrozen Treasure Tracker") - addAsSingletonList("§6${formatNumber(storage.treasuresMined)} Treasures Mined") + addAsSingletonList("§6${formatNumber(data.treasuresMined)} Treasures Mined") addAsSingletonList("§3${formatNumber(estimatedIce)} Total Ice") addAsSingletonList("§3${formatNumber(icePerHour)} Ice/hr") - addAsSingletonList("§8${formatNumber(storage.treasuresMined)} Compact Procs") + addAsSingletonList("§8${formatNumber(data.treasuresMined)} Compact Procs") addAsSingletonList("") for (treasure in FrozenTreasure.entries) { - val count = (storage.treasureCount[treasure] ?: 0) * if (config.showAsDrops) treasure.defaultAmount else 1 + val count = (data.treasureCount[treasure] ?: 0) * if (config.showAsDrops) treasure.defaultAmount else 1 addAsSingletonList("§b${formatNumber(count)} ${treasure.displayName}") } addAsSingletonList("") @@ -134,26 +161,26 @@ class FrozenTreasureTracker { } private fun saveAndUpdate() { - val storage = ProfileStorageData.profileSpecific?.frozenTreasureTracker ?: return - calculateIce(storage) - display = formatDisplay(drawTreasureDisplay(storage)) + val data = tracker.currentDisplay() ?: return + calculateIce(data) + display = formatDisplay(drawTreasureDisplay(data)) } - private fun calculateIce(storage: Storage.ProfileSpecific.FrozenTreasureTracker) { - estimatedIce = 0 - estimatedIce += storage.compactProcs * 160 + private fun calculateIce(data: Data) { + estimatedIce = data.compactProcs * 160L for (treasure in FrozenTreasure.entries) { - val amount = storage.treasureCount[treasure] ?: 0 + val amount = data.treasureCount[treasure] ?: 0 estimatedIce += amount * treasure.defaultAmount * treasure.iceMultiplier } } @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + fun onRenderOverlay(event: GuiRenderEvent) { if (!config.enabled) return if (!onJerryWorkshop()) return if (config.onlyInCave && !inGlacialCave()) return - config.position.renderStringsAndItems(display, posLabel = "Frozen Treasure Tracker") + + tracker.renderDisplay(config.position, display) } @SubscribeEvent @@ -163,5 +190,10 @@ class FrozenTreasureTracker { private fun onJerryWorkshop() = IslandType.WINTER.isInIsland() - private fun inGlacialCave() = onJerryWorkshop() && ScoreboardData.sidebarLinesFormatted.contains(" §7⏣ §3Glacial Cave") + private fun inGlacialCave() = + onJerryWorkshop() && ScoreboardData.sidebarLinesFormatted.contains(" §7⏣ §3Glacial Cave") + + fun resetCommand(args: Array) { + tracker.resetCommand(args, "shresetfrozentreasuretracker") + } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 4cf1f8e5f..ec0fc4848 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -23,14 +23,6 @@ class SkyHanniTracker( fun isInventoryOpen() = inventoryOpen - private fun getSharedTracker(): SharedTracker? { - val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) - } - - private fun getCurrentSession(profileSpecific: Storage.ProfileSpecific) = - currentSessions.getOrPut(profileSpecific) { createNewSession() } - fun addSessionResetButton(list: MutableList>) { if (!inventoryOpen || displayMode != DisplayMode.SESSION) return @@ -89,6 +81,14 @@ class SkyHanniTracker( position.renderStringsAndItems(display, posLabel = name) } + private fun getSharedTracker(): SharedTracker? { + val profileSpecific = ProfileStorageData.profileSpecific ?: return null + return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) + } + + private fun getCurrentSession(profileSpecific: Storage.ProfileSpecific) = + currentSessions.getOrPut(profileSpecific) { createNewSession() } + private fun reset(displayMode: DisplayMode, message: String) { getSharedTracker()?.get(displayMode)?.let { it.reset() @@ -97,7 +97,7 @@ class SkyHanniTracker( } } - class SharedTracker(private val total: Data, private val currentSession: Data, ) { + class SharedTracker(private val total: Data, private val currentSession: Data) { fun modify(modifyFunction: (Data) -> Unit) { modifyFunction(total) modifyFunction(currentSession) -- cgit From e03ba746fa0ab6258fcd5e6855d1590b0ba6f5c9 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:39:30 +0100 Subject: SkyHanniTracker now handles the display list as well. --- .../combat/endernodetracker/EnderNodeTracker.kt | 30 +++------ .../jerry/frozentreasure/FrozenTreasureTracker.kt | 28 ++------- .../features/garden/farming/ArmorDropTracker.kt | 27 ++------ .../features/garden/farming/DicerDropTracker.kt | 23 ++----- .../features/mining/powdertracker/PowderTracker.kt | 53 +++++++--------- .../features/slayer/SlayerProfitTracker.kt | 29 +++------ .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 37 ++++++----- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 73 +++++++++++----------- 8 files changed, 112 insertions(+), 188 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index 1b10bf7eb..b65021067 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -30,13 +30,15 @@ object EnderNodeTracker { private val config get() = SkyHanniMod.feature.combat.enderNodeTracker private var miteGelInInventory = 0 - private var display = emptyList>() - private var lootProfit = mapOf() private val enderNodeRegex = Regex("""ENDER NODE!.+You found (\d+x )?§r(.+)§r§f!""") private val endermanRegex = Regex("""(RARE|PET) DROP! §r(.+) §r§b\(""") - private val tracker = SkyHanniTracker("Ender Node Tracker", { Data() }, { it.enderNodeTracker }) { update() } + private val tracker = SkyHanniTracker("Ender Node Tracker", { Data() }, { it.enderNodeTracker }) { + formatDisplay( + drawDisplay(it) + ) + } class Data : TrackerData() { @@ -94,7 +96,6 @@ object EnderNodeTracker { storage.lootCount.addOrPut(it, amount) } } - update() } @SubscribeEvent @@ -119,8 +120,6 @@ object EnderNodeTracker { tracker.modify { storage -> storage.lootCount.addOrPut(EnderNode.MITE_GEL, change.delta) } - - update() } @SubscribeEvent @@ -138,7 +137,6 @@ object EnderNodeTracker { tracker.modify { storage -> storage.lootCount.addOrPut(EnderNode.MITE_GEL, change) } - update() } miteGelInInventory = newMiteGelInInventory } @@ -149,15 +147,15 @@ object EnderNodeTracker { if (!config.enabled) return if (!isInTheEnd()) return - tracker.renderDisplay(config.position, display) + tracker.renderDisplay(config.position) } @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { config.textFormat.afterChange { - update() + tracker.update() } - update() + tracker.update() } @SubscribeEvent @@ -183,12 +181,6 @@ object EnderNodeTracker { return newProfit } - private fun update() { - val storage = tracker.currentDisplay() ?: return - lootProfit = calculateProfit(storage) - display = formatDisplay(drawDisplay(storage)) - } - private fun isInTheEnd() = LorenzUtils.skyBlockArea == "The End" private fun isEnderArmor(displayName: EnderNode) = when (displayName) { @@ -212,7 +204,7 @@ object EnderNodeTracker { } private fun drawDisplay(storage: Data) = buildList> { - if (!ProfileStorageData.loaded) return emptyList>() + val lootProfit = calculateProfit(storage) addAsSingletonList("§5§lEnder Node Tracker") addAsSingletonList("§d${storage.totalNodesMined.addSeparators()} Ender Nodes mined") @@ -254,11 +246,7 @@ object EnderNodeTracker { val newList = mutableListOf>() for (index in config.textFormat.get()) { newList.add(map[index]) - if (newList.size == 1) { - tracker.addDisplayModeToggle(newList) - } } - tracker.addSessionResetButton(newList) return newList } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt index fa10aa501..bfae2a7d8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt @@ -8,7 +8,6 @@ import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent -import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland @@ -24,7 +23,6 @@ import kotlin.concurrent.fixedRateTimer object FrozenTreasureTracker { private val config get() = SkyHanniMod.feature.event.winter.frozenTreasureTracker - private var display = emptyList>() private var estimatedIce = 0L private var lastEstimatedIce = 0L private var icePerSecond = mutableListOf() @@ -32,7 +30,7 @@ object FrozenTreasureTracker { private var stoppedChecks = 0 private var compactPattern = "COMPACT! You found an Enchanted Ice!".toPattern() private val tracker = SkyHanniTracker("Frozen Treasure Tracker", { Data() }, { it.frozenTreasureTracker }) - { saveAndUpdate() } + { formatDisplay(drawDisplay(it)) } init { fixedRateTimer(name = "skyhanni-frozen-treasure-tracker", period = 1000) { @@ -64,7 +62,7 @@ object FrozenTreasureTracker { icePerHour = 0 stoppedChecks = 0 icePerSecond = mutableListOf() - saveAndUpdate() + tracker.update() } private fun calculateIcePerHour() { @@ -99,11 +97,7 @@ object FrozenTreasureTracker { val newList = mutableListOf>() for (index in config.textFormat) { newList.add(map[index]) - if (newList.size == 1) { - tracker.addDisplayModeToggle(newList) - } } - tracker.addSessionResetButton(newList) return newList } @@ -118,7 +112,6 @@ object FrozenTreasureTracker { tracker.modify { it.compactProcs += 1 } - saveAndUpdate() if (config.hideMessages) event.blockedReason = "frozen treasure tracker" } @@ -128,18 +121,13 @@ object FrozenTreasureTracker { it.treasuresMined += 1 it.treasureCount.addOrPut(treasure, 1) } - saveAndUpdate() if (config.hideMessages) event.blockedReason = "frozen treasure tracker" } } } - @SubscribeEvent - fun onPreProfileSwitch(event: PreProfileSwitchEvent) { - display = emptyList() - } - - private fun drawTreasureDisplay(data: Data) = buildList> { + private fun drawDisplay(data: Data) = buildList> { + calculateIce(data) addAsSingletonList("§1§lFrozen Treasure Tracker") addAsSingletonList("§6${formatNumber(data.treasuresMined)} Treasures Mined") addAsSingletonList("§3${formatNumber(estimatedIce)} Total Ice") @@ -160,12 +148,6 @@ object FrozenTreasureTracker { return "$amount" } - private fun saveAndUpdate() { - val data = tracker.currentDisplay() ?: return - calculateIce(data) - display = formatDisplay(drawTreasureDisplay(data)) - } - private fun calculateIce(data: Data) { estimatedIce = data.compactProcs * 160L for (treasure in FrozenTreasure.entries) { @@ -180,7 +162,7 @@ object FrozenTreasureTracker { if (!onJerryWorkshop()) return if (config.onlyInCave && !inGlacialCave()) return - tracker.renderDisplay(config.position, display) + tracker.renderDisplay(config.position) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt index 3825040d0..ac9f36190 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt @@ -2,7 +2,6 @@ package at.hannibal2.skyhanni.features.garden.farming import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzTickEvent @@ -27,13 +26,13 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds object ArmorDropTracker { - private var display = emptyList>() private var hasArmor = false private val armorPattern = "(FERMENTO|CROPIE|SQUASH|MELON)_(LEGGINGS|CHESTPLATE|BOOTS|HELMET)".toPattern() private val config get() = SkyHanniMod.feature.garden.farmingArmorDrop - private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker }) { update() } + private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker }) + { drawDisplay(it) } class Data : TrackerData() { override fun reset() { @@ -52,7 +51,6 @@ object ArmorDropTracker { @SubscribeEvent fun onPreProfileSwitch(event: PreProfileSwitchEvent) { - display = emptyList() hasArmor = false } @@ -72,29 +70,14 @@ object ArmorDropTracker { tracker.modify { it.drops.addOrPut(drop, 1) } - update() } - private fun update() { - display = drawDisplay() - } - - private fun drawDisplay() = buildList> { - val drops = tracker.currentDisplay()?.drops ?: return@buildList - + private fun drawDisplay(data: Data): List> = buildList { addAsSingletonList("§7RNG Drops for Farming Armor:") - tracker.addDisplayModeToggle(this) - for ((drop, amount) in drops.sortedDesc()) { + for ((drop, amount) in data.drops.sortedDesc()) { val dropName = drop.dropName addAsSingletonList(" §7- §e${amount.addSeparators()}x $dropName") } - - tracker.addSessionResetButton(this) - } - - @SubscribeEvent - fun onConfigLoad(event: ConfigLoadEvent) { - update() } @SubscribeEvent @@ -103,7 +86,7 @@ object ArmorDropTracker { if (!config.enabled) return if (!hasArmor) return - tracker.renderDisplay(config.pos, display) + tracker.renderDisplay(config.pos) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt index 0d95ed0ca..24f55672b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerDropTracker.kt @@ -6,7 +6,6 @@ import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.GardenToolChangeEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.features.garden.CropType import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.ItemUtils.name @@ -20,10 +19,10 @@ import com.google.gson.annotations.Expose import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object DicerDropTracker { - private var display = emptyList>() private val itemDrops = mutableListOf() private val config get() = SkyHanniMod.feature.garden.dicerCounters - private val tracker = SkyHanniTracker("Dicer Drop Tracker", { Data() }, { it.garden.dicerDropTracker }) { update() } + private val tracker = SkyHanniTracker("Dicer Drop Tracker", { Data() }, { it.garden.dicerDropTracker }) + { drawDisplay(it) } class Data : TrackerData() { override fun reset() { @@ -53,11 +52,6 @@ object DicerDropTracker { PRAY_TO_RNGESUS("§5§lPRAY TO RNGESUS DROP"), } - @SubscribeEvent - fun onPreProfileSwitch(event: PreProfileSwitchEvent) { - display = emptyList() - } - @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!GardenAPI.inGarden()) return @@ -75,23 +69,15 @@ object DicerDropTracker { } } - private fun update() { - tracker.currentDisplay()?.let { - display = drawDisplay(it) - } - } - private fun drawDisplay(storage: Data) = buildList> { val cropInHand = cropInHand ?: return@buildList val items = storage.drops.getOrPut(cropInHand) { mutableMapOf() } addAsSingletonList("§7Dicer Drop Tracker for $toolName§7:") - tracker.addDisplayModeToggle(this) for ((rarity, amount) in items.sortedDesc()) { val displayName = rarity.displayName addAsSingletonList(" §7- §e${amount.addSeparators()}x $displayName") } - tracker.addSessionResetButton(this) } private var cropInHand: CropType? = null @@ -104,7 +90,7 @@ object DicerDropTracker { if (cropInHand != null) { toolName = event.toolItem!!.name!! } - update() + tracker.update() } private fun addDrop(crop: CropType, rarity: DropRarity) { @@ -112,14 +98,13 @@ object DicerDropTracker { val map = it.drops.getOrPut(crop) { mutableMapOf() } map.addOrPut(rarity, 1) } - update() } @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent) { if (!isEnabled()) return - tracker.renderDisplay(config.pos, display) + tracker.renderDisplay(config.pos) } class ItemDrop(val crop: CropType, val rarity: DropRarity, val pattern: Regex) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index fa2506069..359fb40b9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -24,7 +24,6 @@ import kotlin.concurrent.fixedRateTimer object PowderTracker { private val config get() = SkyHanniMod.feature.mining.powderTracker - private var display = emptyList>() private val picked = "§6You have successfully picked the lock on this chest!".toPattern() private val uncovered = "§aYou uncovered a treasure chest!".toPattern() private val powderEvent = ".*§r§b§l2X POWDER STARTED!.*".toPattern() @@ -59,7 +58,8 @@ object PowderTracker { } } - private val tracker = SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { saveAndUpdate() } + private val tracker = SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) + { formatDisplay(drawDisplay(it)) } class Data : TrackerData() { override fun reset() { @@ -80,7 +80,7 @@ object PowderTracker { if (config.onlyWhenPowderGrinding && !isGrinding) return - tracker.renderDisplay(config.position, display) + tracker.renderDisplay(config.position) } @SubscribeEvent @@ -120,7 +120,7 @@ object PowderTracker { } } } - saveAndUpdate() + tracker.update() } @SubscribeEvent @@ -132,7 +132,7 @@ object PowderTracker { powderTimer = group("time") doublePowder = powderTimer != "00:00" - saveAndUpdate() + tracker.update() } } if (System.currentTimeMillis() - lastChestPicked > 60_000) { @@ -142,7 +142,9 @@ object PowderTracker { @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - config.textFormat.afterChange { saveAndUpdate() } + config.textFormat.afterChange { + tracker.update() + } } @SubscribeEvent @@ -164,7 +166,7 @@ object PowderTracker { chestInfo.stoppedChecks = 0 chestInfo.perMin.clear() doublePowder = false - saveAndUpdate() + tracker.update() } @SubscribeEvent @@ -176,40 +178,32 @@ object PowderTracker { } } - private fun saveAndUpdate() { - calculate(gemstoneInfo, PowderChestReward.GEMSTONE_POWDER) - calculate(mithrilInfo, PowderChestReward.MITHRIL_POWDER) - calculate(diamondEssenceInfo, PowderChestReward.DIAMOND_ESSENCE) - calculate(goldEssenceInfo, PowderChestReward.GOLD_ESSENCE) - calculateChest() - display = formatDisplay(drawDisplay()) - } - private fun formatDisplay(map: List>) = buildList { if (map.isEmpty()) return@buildList for (index in config.textFormat.get()) { add(map[index]) } - - tracker.addSessionResetButton(this) } - private fun drawDisplay() = buildList> { + private fun drawDisplay(data: Data): List> = buildList { + calculate(data, gemstoneInfo, PowderChestReward.GEMSTONE_POWDER) + calculate(data, mithrilInfo, PowderChestReward.MITHRIL_POWDER) + calculate(data, diamondEssenceInfo, PowderChestReward.DIAMOND_ESSENCE) + calculate(data, goldEssenceInfo, PowderChestReward.GOLD_ESSENCE) + calculateChest(data) + addAsSingletonList("§b§lPowder Tracker") - tracker.addDisplayModeToggle(this) if (!tracker.isInventoryOpen()) { addAsSingletonList("") } - val display = tracker.currentDisplay() ?: return@buildList - val chestPerHour = format(chestInfo.perHour) - addAsSingletonList("§d${display.totalChestPicked.addSeparators()} Total Chests Picked §7($chestPerHour/h)") + addAsSingletonList("§d${data.totalChestPicked.addSeparators()} Total Chests Picked §7($chestPerHour/h)") addAsSingletonList("§bDouble Powder: ${if (doublePowder) "§aActive! §7($powderTimer)" else "§cInactive!"}") val entries = PowderChestReward.entries - val rewards = display.rewards + val rewards = data.rewards addPerHour(rewards, entries[0], mithrilInfo) addPerHour(rewards, entries[1], gemstoneInfo) addAsSingletonList("") @@ -296,15 +290,12 @@ object PowderTracker { resourceInfo.stoppedChecks = 0 } - private fun calculate(info: ResourceInfo, reward: PowderChestReward) { - val display = tracker.currentDisplay() ?: return - val rewards = display.rewards - info.estimated = rewards.getOrDefault(reward, 0) + private fun calculate(display: Data, info: ResourceInfo, reward: PowderChestReward) { + info.estimated = display.rewards.getOrDefault(reward, 0) } - private fun calculateChest() { - val display = tracker.currentDisplay() ?: return - chestInfo.estimated = display.totalChestPicked.toLong() + private fun calculateChest(data: Data) { + chestInfo.estimated = data.totalChestPicked.toLong() } private fun convert(roughCount: Long): Gem { diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index 7efaed3d3..229d9007c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -48,7 +48,6 @@ object SlayerProfitTracker { private var itemLogCategory = "" private var baseSlayerType = "" - private var display = emptyList>() private val logger = LorenzLogger("slayer/profit_tracker") private var lastClickDelay = 0L private val trackers = mutableMapOf>() @@ -106,7 +105,6 @@ object SlayerProfitTracker { getTracker()?.modify { it.slayerSpawnCost += price } - update() } private var allowedItems = mapOf>() @@ -135,14 +133,13 @@ object SlayerProfitTracker { val newSlayer = event.newSlayer itemLogCategory = newSlayer.removeColor() baseSlayerType = itemLogCategory.substringBeforeLast(" ") - update() + getTracker()?.update() } private fun addMobKillCoins(coins: Int) { getTracker()?.modify { it.mobKillCoins += coins } - update() } private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { @@ -152,8 +149,6 @@ object SlayerProfitTracker { slayerItemProfit.timesDropped++ slayerItemProfit.totalAmount += stackSize } - - update() } private fun getTracker(): SkyHanniTracker? { @@ -165,7 +160,7 @@ object SlayerProfitTracker { itemLogCategory ) { Data() } } - SkyHanniTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { update() } + SkyHanniTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { drawDisplay(it) } } } @@ -174,8 +169,6 @@ object SlayerProfitTracker { getTracker()?.modify { it.slayerCompletedCount++ } - - update() } @SubscribeEvent @@ -238,16 +231,9 @@ object SlayerProfitTracker { return internalName in allowedList } - fun update() { - val tracker = getTracker() ?: return - display = drawDisplay(tracker) - } - - private fun drawDisplay(tracker: SkyHanniTracker) = buildList> { - val itemLog = tracker.currentDisplay() ?: return@buildList - + private fun drawDisplay(itemLog: Data) = buildList> { + val tracker = getTracker() ?: return@buildList addAsSingletonList("§e§l$itemLogCategory Profit Tracker") - tracker.addDisplayModeToggle(this) var profit = 0.0 val map = mutableMapOf() @@ -291,7 +277,7 @@ object SlayerProfitTracker { itemProfit.hidden = !hidden lastClickDelay = System.currentTimeMillis() } - update() + tracker.update() } } else Renderable.string(text) if (tracker.isInventoryOpen() || !hidden) { @@ -349,11 +335,10 @@ object SlayerProfitTracker { isCurrent = { it.ordinal == config.priceFrom }, onChange = { config.priceFrom = it.ordinal - update() + tracker.update() } ) } - tracker.addSessionResetButton(this) } private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { @@ -368,7 +353,7 @@ object SlayerProfitTracker { if (!isEnabled()) return if (!SlayerAPI.isInCorrectArea) return - getTracker()?.renderDisplay(config.pos, display) + getTracker()?.renderDisplay(config.pos) } fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index e6bc74e06..4f0704ead 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -334,22 +334,29 @@ object LorenzUtils { isCurrent: (T) -> Boolean, crossinline onChange: (T) -> Unit, ) { - add(buildList { - add(prefix) - for (entry in enumValues()) { - val display = getName(entry) - if (isCurrent(entry)) { - add("§a[$display]") - } else { - add("§e[") - add(Renderable.link("§e$display") { - onChange(entry) - }) - add("§e]") - } - add(" ") + add(buildSelector(prefix, getName, isCurrent, onChange)) + } + + inline fun > buildSelector( + prefix: String, + getName: (T) -> String, + isCurrent: (T) -> Boolean, + crossinline onChange: (T) -> Unit + ) = buildList { + add(prefix) + for (entry in enumValues()) { + val display = getName(entry) + if (isCurrent(entry)) { + add("§a[$display]") + } else { + add("§e[") + add(Renderable.link("§e$display") { + onChange(entry) + }) + add("§e]") } - }) + add(" ") + } } inline fun MutableList>.addButton( diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index ec0fc4848..d1b783f7e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -5,7 +5,6 @@ import at.hannibal2.skyhanni.config.core.config.Position import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft @@ -15,46 +14,15 @@ class SkyHanniTracker( private val name: String, private val createNewSession: () -> Data, private val getStorage: (Storage.ProfileSpecific) -> Data, - private val update: () -> Unit, + private val drawDisplay: (Data) -> List>, ) { private var inventoryOpen = false private var displayMode = DisplayMode.TOTAL private val currentSessions = mutableMapOf() + private var display = emptyList>() fun isInventoryOpen() = inventoryOpen - fun addSessionResetButton(list: MutableList>) { - if (!inventoryOpen || displayMode != DisplayMode.SESSION) return - - list.addAsSingletonList( - Renderable.clickAndHover( - "§cReset session!", - listOf( - "§cThis will reset your", - "§ccurrent session of", - "§c$name" - ), - ) { - reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") - }) - } - - fun addDisplayModeToggle(list: MutableList>) { - if (!inventoryOpen) return - - list.addSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == displayMode }, - onChange = { - displayMode = it - update() - } - ) - } - - fun currentDisplay() = getSharedTracker()?.get(displayMode) - fun resetCommand(args: Array, command: String) { if (args.size == 1 && args[0].lowercase() == "confirm") { reset(DisplayMode.TOTAL, "§e[SkyHanni] Reset total $name!") @@ -69,9 +37,10 @@ class SkyHanniTracker( fun modify(modifyFunction: (Data) -> Unit) { getSharedTracker()?.modify(modifyFunction) + update() } - fun renderDisplay(position: Position, display: List>) { + fun renderDisplay(position: Position) { val currentlyOpen = Minecraft.getMinecraft().currentScreen is GuiInventory if (inventoryOpen != currentlyOpen) { inventoryOpen = currentlyOpen @@ -81,6 +50,40 @@ class SkyHanniTracker( position.renderStringsAndItems(display, posLabel = name) } + fun update() { + display = currentDisplay()?.let { + val list = drawDisplay(it).toMutableList() + if (inventoryOpen) { + list.add(1, LorenzUtils.buildSelector( + "§7Display Mode: ", + getName = { type -> type.displayName }, + isCurrent = { it == displayMode }, + onChange = { + displayMode = it + update() + } + )) + } + if (inventoryOpen && displayMode == DisplayMode.SESSION) { + list.addAsSingletonList( + Renderable.clickAndHover( + "§cReset session!", + listOf( + "§cThis will reset your", + "§ccurrent session of", + "§c$name" + ), + ) { + reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") + }) + } + + list + } ?: emptyList() + } + + private fun currentDisplay() = getSharedTracker()?.get(displayMode) + private fun getSharedTracker(): SharedTracker? { val profileSpecific = ProfileStorageData.profileSpecific ?: return null return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) -- cgit From 5a9af30efab8de12bb7b7431d47cbd4741274b82 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:50:26 +0100 Subject: Added cooldown to no longer spam the reset current session button of trackers. --- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 60 +++++++++++++--------- 1 file changed, 36 insertions(+), 24 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index d1b783f7e..e80f93edf 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -6,9 +6,11 @@ import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiInventory +import kotlin.time.Duration.Companion.seconds class SkyHanniTracker( private val name: String, @@ -20,6 +22,7 @@ class SkyHanniTracker( private var displayMode = DisplayMode.TOTAL private val currentSessions = mutableMapOf() private var display = emptyList>() + private var sessionResetTime = SimpleTimeMark.farPast() fun isInventoryOpen() = inventoryOpen @@ -51,37 +54,46 @@ class SkyHanniTracker( } fun update() { - display = currentDisplay()?.let { - val list = drawDisplay(it).toMutableList() + display = buildFinalDisplay() + } + + private fun buildFinalDisplay(): List> { + val data = currentDisplay() ?: return emptyList() + + return drawDisplay(data).toMutableList().also { if (inventoryOpen) { - list.add(1, LorenzUtils.buildSelector( - "§7Display Mode: ", - getName = { type -> type.displayName }, - isCurrent = { it == displayMode }, - onChange = { - displayMode = it - update() - } - )) + it.add(1, buildDisplayModeView()) } if (inventoryOpen && displayMode == DisplayMode.SESSION) { - list.addAsSingletonList( - Renderable.clickAndHover( - "§cReset session!", - listOf( - "§cThis will reset your", - "§ccurrent session of", - "§c$name" - ), - ) { - reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") - }) + it.addAsSingletonList(buildSessionResetButton()) } + } + } - list - } ?: emptyList() + private fun buildSessionResetButton() = Renderable.clickAndHover( + "§cReset session!", + listOf( + "§cThis will reset your", + "§ccurrent session of", + "§c$name" + ), + ) { + if (sessionResetTime.passedSince() > 3.seconds) { + reset(DisplayMode.SESSION, "§e[SkyHanni] Reset this session of $name!") + sessionResetTime = SimpleTimeMark.now() + } } + private fun buildDisplayModeView() = LorenzUtils.buildSelector( + "§7Display Mode: ", + getName = { type -> type.displayName }, + isCurrent = { it == displayMode }, + onChange = { + displayMode = it + update() + } + ) + private fun currentDisplay() = getSharedTracker()?.get(displayMode) private fun getSharedTracker(): SharedTracker? { -- cgit From 861cbd33e56ecb32d464234ebb651f0b13cba17b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 19:38:33 +0100 Subject: code cleanup --- .../skyhanni/utils/tracker/SkyHanniTracker.kt | 41 +++++++++------------- 1 file changed, 17 insertions(+), 24 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index e80f93edf..73bba2b51 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -39,8 +39,10 @@ class SkyHanniTracker( } fun modify(modifyFunction: (Data) -> Unit) { - getSharedTracker()?.modify(modifyFunction) - update() + getSharedTracker()?.let { + it.modify(modifyFunction) + update() + } } fun renderDisplay(position: Position) { @@ -54,19 +56,17 @@ class SkyHanniTracker( } fun update() { - display = buildFinalDisplay() + display = getSharedTracker()?.let { + buildFinalDisplay(drawDisplay(it.get(displayMode))) + } ?: emptyList() } - private fun buildFinalDisplay(): List> { - val data = currentDisplay() ?: return emptyList() - - return drawDisplay(data).toMutableList().also { - if (inventoryOpen) { - it.add(1, buildDisplayModeView()) - } - if (inventoryOpen && displayMode == DisplayMode.SESSION) { - it.addAsSingletonList(buildSessionResetButton()) - } + private fun buildFinalDisplay(rawList: List>) = rawList.toMutableList().also { + if (inventoryOpen) { + it.add(1, buildDisplayModeView()) + } + if (inventoryOpen && displayMode == DisplayMode.SESSION) { + it.addAsSingletonList(buildSessionResetButton()) } } @@ -94,19 +94,13 @@ class SkyHanniTracker( } ) - private fun currentDisplay() = getSharedTracker()?.get(displayMode) - - private fun getSharedTracker(): SharedTracker? { - val profileSpecific = ProfileStorageData.profileSpecific ?: return null - return SharedTracker(getStorage(profileSpecific), getCurrentSession(profileSpecific)) + private fun getSharedTracker() = ProfileStorageData.profileSpecific?.let { + SharedTracker(getStorage(it), currentSessions.getOrPut(it) { createNewSession() }) } - private fun getCurrentSession(profileSpecific: Storage.ProfileSpecific) = - currentSessions.getOrPut(profileSpecific) { createNewSession() } - private fun reset(displayMode: DisplayMode, message: String) { - getSharedTracker()?.get(displayMode)?.let { - it.reset() + getSharedTracker()?.let { + it.get(displayMode).reset() LorenzUtils.chat(message) update() } @@ -129,5 +123,4 @@ class SkyHanniTracker( SESSION("This Session"), ; } - } -- cgit From 22747a9b72e36c51cec634a41123c3415c13e36c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 20:13:12 +0100 Subject: added dirty flag --- .../at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index 73bba2b51..fe2553c7f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -23,6 +23,7 @@ class SkyHanniTracker( private val currentSessions = mutableMapOf() private var display = emptyList>() private var sessionResetTime = SimpleTimeMark.farPast() + private var dirty = false fun isInventoryOpen() = inventoryOpen @@ -52,13 +53,18 @@ class SkyHanniTracker( update() } + if (dirty) { + display = getSharedTracker()?.let { + buildFinalDisplay(drawDisplay(it.get(displayMode))) + } ?: emptyList() + dirty = false + } + position.renderStringsAndItems(display, posLabel = name) } fun update() { - display = getSharedTracker()?.let { - buildFinalDisplay(drawDisplay(it.get(displayMode))) - } ?: emptyList() + dirty = true } private fun buildFinalDisplay(rawList: List>) = rawList.toMutableList().also { -- cgit From 5eabee4e4091f60cc8da3a38ee33eed9124e06fd Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 20:13:40 +0100 Subject: fixed error with empty display --- src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index fe2553c7f..26153e5c9 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -68,6 +68,7 @@ class SkyHanniTracker( } private fun buildFinalDisplay(rawList: List>) = rawList.toMutableList().also { + if (it.isEmpty()) return@also if (inventoryOpen) { it.add(1, buildDisplayModeView()) } -- cgit From 6157bc46e3355cf353767572c46bba3fb6f8d02f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 20:14:02 +0100 Subject: changed color of "Slayer boss soon!" from red to yellow. --- .../java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt index 7c71632e2..e7b7fe0e5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt @@ -29,7 +29,7 @@ class SlayerBossSpawnSoon { if (completion > config.percent / 100.0) { if (!warned || (config.repeat && completion != lastCompletion)) { SoundUtils.playBeepSound() - LorenzUtils.sendTitle("§cSlayer boss soon!", 2.seconds) + LorenzUtils.sendTitle("§eSlayer boss soon!", 2.seconds) warned = true } } else { @@ -39,4 +39,4 @@ class SlayerBossSpawnSoon { } fun isEnabled() = config.enabled && SlayerAPI.hasActiveSlayerQuest() -} \ No newline at end of file +} -- cgit From c98bbe34efab04cf46dde6a573b57275a69c5722 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 21:47:06 +0100 Subject: Added support for slayer tracker items for loot from area mini-bosses. Fixed a bug where some items were counted twice. --- .../at/hannibal2/skyhanni/api/CollectionAPI.kt | 23 +++++++++------- .../at/hannibal2/skyhanni/data/OwnInventoryData.kt | 10 +++---- .../java/at/hannibal2/skyhanni/data/SlayerAPI.kt | 19 +------------ .../events/entity/ItemAddInInventoryEvent.kt | 6 +++++ .../skyhanni/features/minion/MinionCollectLogic.kt | 6 ++--- .../features/slayer/SlayerItemsOnGround.kt | 5 +--- .../features/slayer/SlayerProfitTracker.kt | 31 +++------------------- 7 files changed, 31 insertions(+), 69 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/events/entity/ItemAddInInventoryEvent.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt index 2476cbe73..29ce97471 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/CollectionAPI.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.api import at.hannibal2.skyhanni.events.CollectionUpdateEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent +import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils @@ -66,6 +67,17 @@ class CollectionAPI { } } + @SubscribeEvent + fun onItemAdd(event: ItemAddInInventoryEvent) { + // TODO add support for replenish (higher collection than actual items in inv) + val internalName = event.internalName + if (internalName.getItemStackOrNull() == null) { + LorenzUtils.debug("CollectionAPI.addFromInventory: item is null for '$internalName'") + return + } + collectionValue.addOrPut(internalName, event.amount.toLong()) + } + companion object { // TODO USE SH-REPO val collectionValue = mutableMapOf() @@ -74,14 +86,5 @@ class CollectionAPI { fun isCollectionTier0(lore: List) = lore.map { collectionTier0Pattern.matcher(it) }.any { it.matches() } fun getCollectionCounter(internalName: NEUInternalName): Long? = collectionValue[internalName] - - // TODO add support for replenish (higher collection than actual items in inv) - fun addFromInventory(internalName: NEUInternalName, amount: Int) { - if (internalName.getItemStackOrNull() == null) { - LorenzUtils.debug("CollectionAPI.addFromInventory: item is null for '$internalName'") - return - } - collectionValue.addOrPut(internalName, amount.toLong()) - } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt index 7e2032077..da505f409 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt @@ -1,14 +1,13 @@ package at.hannibal2.skyhanni.data -import at.hannibal2.skyhanni.api.CollectionAPI import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.OwnInventoryItemUpdateEvent import at.hannibal2.skyhanni.events.PacketEvent +import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent import at.hannibal2.skyhanni.features.bazaar.BazaarApi import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUItems import net.minecraft.item.ItemStack import net.minecraft.network.play.server.S2FPacketSetSlot @@ -92,10 +91,7 @@ class OwnInventoryData { val (_, amount) = NEUItems.getMultiplier(internalName) if (amount > 1) return - addMultiplier(internalName, add) + ItemAddInInventoryEvent(internalName, add).postAndCatch() } - private fun addMultiplier(internalName: NEUInternalName, amount: Int) { - CollectionAPI.addFromInventory(internalName, amount) - } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt index f3c23700d..c827a9f53 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt @@ -15,7 +15,6 @@ import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.RecalculatingValue -import at.hannibal2.skyhanni.utils.StringUtils.removeColor import com.google.common.cache.CacheBuilder import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.concurrent.TimeUnit @@ -40,22 +39,6 @@ object SlayerAPI { System.currentTimeMillis() } else latestProgressChangeTime - - // TODO use repo - fun ignoreSlayerDrop(name: String) = when (name.removeColor()) { - // maybe everywhere? - "Stone" -> true - "Head" -> true - - // Spider - "Cobweb" -> true - - // Blaze - "Water Bottle" -> true - - else -> false - } - fun getItemNameAndPrice(internalName: NEUInternalName, amount: Int): Pair { val key = internalName to amount nameCache.getIfPresent(key)?.let { @@ -178,4 +161,4 @@ object SlayerAPI { else -> null } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/events/entity/ItemAddInInventoryEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/entity/ItemAddInInventoryEvent.kt new file mode 100644 index 000000000..6b9747adf --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/events/entity/ItemAddInInventoryEvent.kt @@ -0,0 +1,6 @@ +package at.hannibal2.skyhanni.events.entity + +import at.hannibal2.skyhanni.events.LorenzEvent +import at.hannibal2.skyhanni.utils.NEUInternalName + +class ItemAddInInventoryEvent(val internalName: NEUInternalName, val amount: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt index 1615838ae..091197b53 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionCollectLogic.kt @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.features.minion -import at.hannibal2.skyhanni.api.CollectionAPI import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.events.MinionOpenEvent +import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.NEUInternalName @@ -43,10 +43,10 @@ class MinionCollectLogic { val diff = amount - old if (diff > 0) { - CollectionAPI.addFromInventory(internalId, diff) + ItemAddInInventoryEvent(internalId, diff).postAndCatch() } } oldMap = emptyMap() } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt index 0c80973c4..0cb129c7d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerItemsOnGround.kt @@ -5,7 +5,6 @@ import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName -import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LocationUtils import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec @@ -37,8 +36,6 @@ class SlayerItemsOnGround { if (location.distance(LocationUtils.playerLocation()) > 15) continue val itemStack = entityItem.entityItem - val name = itemStack.name ?: continue - if (SlayerAPI.ignoreSlayerDrop(name)) continue // happens in spiders den sometimes if (itemStack.item == Items.spawn_egg) continue if (itemStack.getInternalName().equals("")) continue // TODO remove, should never happen @@ -54,4 +51,4 @@ class SlayerItemsOnGround { event.drawString(location, text) } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index 229d9007c..43f609f10 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -4,18 +4,15 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.GuiRenderEvent -import at.hannibal2.skyhanni.events.PacketEvent import at.hannibal2.skyhanni.events.PurseChangeCause import at.hannibal2.skyhanni.events.PurseChangeEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.events.SackChangeEvent import at.hannibal2.skyhanni.events.SlayerChangeEvent import at.hannibal2.skyhanni.events.SlayerQuestCompleteEvent +import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.getBazaarData import at.hannibal2.skyhanni.test.PriceSource -import at.hannibal2.skyhanni.utils.EntityUtils -import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull -import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils @@ -33,18 +30,12 @@ import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker import at.hannibal2.skyhanni.utils.tracker.TrackerData -import com.google.common.cache.CacheBuilder import com.google.gson.annotations.Expose -import net.minecraft.entity.item.EntityItem -import net.minecraft.network.play.server.S0DPacketCollectItem -import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.concurrent.TimeUnit import kotlin.time.Duration.Companion.seconds object SlayerProfitTracker { private val config get() = SkyHanniMod.feature.slayer.itemProfitTracker - private var collectedCache = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build() private var itemLogCategory = "" private var baseSlayerType = "" @@ -186,27 +177,13 @@ object SlayerProfitTracker { } } - @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) - fun onChatPacket(event: PacketEvent.ReceiveEvent) { + @SubscribeEvent + fun onItemAdd(event: ItemAddInInventoryEvent) { if (!isEnabled()) return if (!SlayerAPI.isInCorrectArea) return if (!SlayerAPI.hasActiveSlayerQuest()) return - val packet = event.packet - if (packet !is S0DPacketCollectItem) return - - val entityID = packet.collectedItemEntityID - val item = EntityUtils.getEntityByID(entityID) ?: return - if (item !is EntityItem) return - - if (collectedCache.getIfPresent(entityID) != null) return - collectedCache.put(entityID, Unit) - - val itemStack = item.entityItem - val name = itemStack.name ?: return - if (SlayerAPI.ignoreSlayerDrop(name)) return - val internalName = itemStack.getInternalNameOrNull() ?: return - addItem(internalName, itemStack.stackSize) + addItem(event.internalName, event.amount) } private fun addItem(internalName: NEUInternalName, amount: Int) { -- cgit From 4b1ca0420affea855bb7c41775825b6bb933b570 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 22:39:27 +0100 Subject: Fixed item rarity errors in museum. --- .../hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index b0eab9926..ddd6896d8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -7,7 +7,9 @@ import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.RenderItemTooltipEvent +import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList @@ -130,6 +132,12 @@ object EstimatedItemValue { return } + if (InventoryUtils.openInventoryName().startsWith("Museum ")) { + if (item.getLore().any { it.contains("Armor Set") }) { + return + } + } + val newDisplay = try { draw(item) } catch (e: Exception) { -- cgit From 1408f90d61526e6afc96451eea42ef6260e6cfb6 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Thu, 9 Nov 2023 21:44:29 +0000 Subject: Add message for no new options to configure (#700) No longer opening empty /shdefaultoptions GUI. #700 --- .../features/misc/massconfiguration/DefaultConfigFeatures.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigFeatures.kt index ef9bd1e75..930c67358 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigFeatures.kt @@ -65,7 +65,10 @@ object DefaultConfigFeatures { } } .filter { (_, filteredOptions) -> filteredOptions.isNotEmpty() } - + if (optionList.isEmpty()) { + LorenzUtils.chat("There are no new options to configure between $old and $new") + return + } SkyHanniMod.screenToOpen = DefaultConfigOptionGui(optionList, old, new) } -- cgit From 1a5fb018272df4468dabf0c5facb562c6d3cce30 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:27:16 +0100 Subject: Workaround for broken compatibility with skytils --- .../mixins/transformers/renderer/MixinRendererLivingEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java index d01ecd8a4..b74905564 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/renderer/MixinRendererLivingEntity.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(RendererLivingEntity.class) +@Mixin(value = RendererLivingEntity.class, priority = 1001) public abstract class MixinRendererLivingEntity extends Render { protected MixinRendererLivingEntity(RenderManager renderManager) { @@ -28,4 +28,4 @@ public abstract class MixinRendererLivingEntity exte private int changeHurtTime(EntityLivingBase entity) { return RenderLivingEntityHelper.Companion.changeHurtTime(entity); } -} \ No newline at end of file +} -- cgit From 42c2f4f7375dd06167f3413bfcb6de375f68b769 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 10 Nov 2023 18:29:44 +0100 Subject: Updated mcmod.info: Added icon to mod info (for prism and similar launchers), set GitHub page as mod url, and changed credits to the GitHub contributors page --- src/main/resources/mcmod.info | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/main') diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index d920128ae..ba340cda6 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,16 +1,16 @@ [ - { - "modid": "skyhanni", - "name": "SkyHanni", - "description": "Hypixel SkyBlock Mod", - "version": "${version}", - "mcversion": "1.8.9", - "url": "", - "updateUrl": "", - "authorList": ["hannibal2"], - "credits": "Alea1337 & Eisengolem", - "logoFile": "", - "screenshots": [], - "dependencies": ["NotEnoughUpdates"] - } + { + "modid": "skyhanni", + "name": "SkyHanni", + "description": "Hypixel SkyBlock Mod", + "version": "${version}", + "mcversion": "1.8.9", + "url": "https://github.com/hannibal002/SkyHanni", + "updateUrl": "", + "authorList": ["hannibal2"], + "credits": "https://github.com/hannibal002/SkyHanni/graphs/contributors", + "logoFile": "assets/skyhanni/logo.png", + "screenshots": [], + "dependencies": ["NotEnoughUpdates"] + } ] -- cgit From 45fdcb9d1de40bd9ae3a9784fe908f1191976507 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 10 Nov 2023 18:31:12 +0100 Subject: code cleanup --- src/main/resources/mcmod.info | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index ba340cda6..0e135af9d 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -7,10 +7,14 @@ "mcversion": "1.8.9", "url": "https://github.com/hannibal002/SkyHanni", "updateUrl": "", - "authorList": ["hannibal2"], + "authorList": [ + "hannibal2" + ], "credits": "https://github.com/hannibal002/SkyHanni/graphs/contributors", "logoFile": "assets/skyhanni/logo.png", "screenshots": [], - "dependencies": ["NotEnoughUpdates"] + "dependencies": [ + "NotEnoughUpdates" + ] } ] -- cgit From 20cbb7d8e48757ae21230a650dcee06a56aaa190 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:40:24 +0100 Subject: added hot swap detection messages --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 3 ++ .../skyhanni/config/features/DevConfig.java | 11 +++-- .../at/hannibal2/skyhanni/test/HotSwapDetection.kt | 53 ++++++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index b4a9a1c12..4006df431 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -289,6 +289,7 @@ import at.hannibal2.skyhanni.features.summonings.SummoningMobManager import at.hannibal2.skyhanni.features.summonings.SummoningSoulsName import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper import at.hannibal2.skyhanni.test.HighlightMissingRepoItems +import at.hannibal2.skyhanni.test.HotSwapDetection import at.hannibal2.skyhanni.test.PacketTest import at.hannibal2.skyhanni.test.ParkourWaypointSaver import at.hannibal2.skyhanni.test.ShowItemUuid @@ -639,6 +640,8 @@ class SkyHanniMod { loadModule(HighlightMissingRepoItems()) loadModule(ParkourWaypointSaver()) loadModule(TestShowSlotNumber()) + loadModule(SkyHanniDebugsAndTests) + loadModule(HotSwapDetection) } @Mod.EventHandler diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/DevConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/DevConfig.java index be43a7526..4ee5f9469 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/DevConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/DevConfig.java @@ -34,9 +34,9 @@ public class DevConfig { @Expose @ConfigOption( - name = "Mod Menu Log", - desc = "Enables debug messages when the currently opened GUI changes, with the path to the gui class. " + - "Useful for adding more mods to quick mod menu switch." + name = "Mod Menu Log", + desc = "Enables debug messages when the currently opened GUI changes, with the path to the gui class. " + + "Useful for adding more mods to quick mod menu switch." ) @ConfigEditorBoolean public boolean modMenuLog = false; @@ -95,6 +95,11 @@ public class DevConfig { @ConfigOption(name = "Highlight Missing Repo Items", desc = "Highlights each item in the current inventory that is not in your current NEU repo.") @ConfigEditorBoolean public boolean highlightMissingRepo = false; + + @Expose + @ConfigOption(name = "Hot Swap Detection", desc = "Show chat messages when Hot Swap starts and ends.") + @ConfigEditorBoolean + public boolean hotSwapDetection = false; } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt b/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt new file mode 100644 index 000000000..e3acc25e7 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt @@ -0,0 +1,53 @@ +package at.hannibal2.skyhanni.test + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.MinecraftData +import at.hannibal2.skyhanni.utils.LorenzUtils +import kotlin.concurrent.fixedRateTimer + +object HotSwapDetection { + private val config get() = SkyHanniMod.feature.dev.debug + + private var latestTick = 0 + private var lastTps = 0 + private var hotswap = false + + init { + fixedRateTimer(name = "skyhanni-tps-counter-seconds", period = 1000L) { + val currentTick = MinecraftData.totalTicks + val diff = currentTick - latestTick + latestTick = currentTick + + // we count 2 client ticks per tick, we are bad + handleTps(diff / 2) + } + } + + private fun handleTps(tps: Int) { + if (!config.hotSwapDetection) return + + // ignore below one minute + if (latestTick < 20 * 60) return + + println("diff: $tps") + + if (tps < 5) { + LorenzUtils.debug("Lags! Only $tps tps") + } + + if (!hotswap) { + if (tps < 2) { + if (lastTps > 15) { + LorenzUtils.debug("Detected hotswap now!") + hotswap = true + } + } + } else { + if (tps > 15) { + hotswap = false + LorenzUtils.debug("Detected hotswap end!") + } + } + lastTps = tps + } +} -- cgit From 5477d22a05c366095f402de10c1e0b9b15e18320 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:42:11 +0100 Subject: Added /shdebugwaypoint as test/debug command. --- .../hannibal2/skyhanni/config/commands/Commands.kt | 1 + .../skyhanni/test/SkyHanniDebugsAndTests.kt | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 89885ec4d..a2a1468a9 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -259,6 +259,7 @@ object Commands { private fun developersCodingHelp() { registerCommand("shtest", "Unused test command.") { SkyHanniDebugsAndTests.testCommand(it) } + registerCommand("shdebugwaypoint", "Mark a waypoint on that location") { SkyHanniDebugsAndTests.waypoint(it) } registerCommand("shreloadlocalrepo", "Reloading the local repo data") { SkyHanniMod.repo.reloadLocalRepo() } registerCommand("shchathistory", "Show the unfiltered chat history") { ChatManager.openChatFilterGUI() } registerCommand( diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 36042b977..1f8e0a626 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -8,10 +8,12 @@ import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.PlaySoundEvent import at.hannibal2.skyhanni.events.ReceiveParticleEvent import at.hannibal2.skyhanni.features.dungeon.DungeonAPI import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorColorNames +import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull @@ -19,15 +21,18 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LocationUtils +import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzDebug import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.makeAccessible +import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.OSUtils +import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.SoundUtils @@ -68,6 +73,31 @@ class SkyHanniDebugsAndTests { LorenzDebug.log(text) } + private var testLocation: LorenzVec? = null + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + testLocation?.let { + event.drawWaypointFilled(it, LorenzColor.WHITE.toColor()) + event.drawDynamicText(it, "Test", 1.5) + } + } + + fun waypoint(args: Array) { + SoundUtils.playBeepSound() + + if (args.isEmpty()) { + testLocation = null + LorenzUtils.chat("reset test waypoint") + } + + val x = args[0].toDouble() + val y = args[1].toDouble() + val z = args[2].toDouble() + testLocation = LorenzVec(x, y, z) + LorenzUtils.chat("set test waypoint") + } + fun testCommand(args: Array) { SoundUtils.playBeepSound() -- cgit From 30b959a6da9e516cfb190554584b9a013c0412f7 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:42:54 +0100 Subject: Pablo Helper --- .../java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt | 11 ++++++----- src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt | 9 +++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt index 89a0a1917..12b2b78df 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt @@ -8,7 +8,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.SimpleTimeMark -import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.matchMatchers import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.minutes @@ -17,16 +17,17 @@ import kotlin.time.Duration.Companion.minutes class PabloHelper { private val config get() = SkyHanniMod.feature.crimsonIsle - // There is a different message if the player asks Pablo with an item in their hand, but I don't think it's necessary - // I'll add it if requested ~NetheriteMiner - private val pabloMessagePattern = "\\[NPC] Pablo: Could you bring me an (?[\\w ]+).*".toPattern() + private val patterns = listOf( + "\\[NPC] Pablo: Could you bring me an (?[\\w ]+).*".toPattern(), + "\\[NPC] Pablo: Bring me that (?[\\w ]+) as soon as you can!".toPattern() + ) private var lastSentMessage = SimpleTimeMark.farPast() @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return if (lastSentMessage.passedSince() < 5.minutes) return - val itemName = pabloMessagePattern.matchMatcher(event.message.removeColor()) { + val itemName = patterns.matchMatchers(event.message.removeColor()) { group("flower") } ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 0900b3812..b60c08b6f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -89,6 +89,15 @@ object StringUtils { } } + inline fun List.matchMatchers(text: String, consumer: Matcher.() -> T): T? { + for (pattern in iterator()) { + pattern.matchMatcher(text) { + return consumer() + } + } + return null + } + fun getColor(string: String, default: Int, darker: Boolean = true): Int { val stringPattern = "§[0123456789abcdef].*".toPattern() -- cgit From fb40235d00dcfa42ca6eb3b8dacec8138386260b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:57:42 +0100 Subject: code cleanup --- src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt | 2 +- src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt index da9497d08..bfcc8df5f 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt @@ -95,4 +95,4 @@ object MinecraftData { InventoryUtils.itemInHandId = NEUInternalName.NONE InventoryUtils.recentItemsInHand.clear() } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt index 272f0f7f9..b9a6d84bb 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/PartyAPI.kt @@ -8,7 +8,6 @@ import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.StringUtils.removeResets import at.hannibal2.skyhanni.utils.StringUtils.trimWhiteSpaceAndResets -import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.random.Random -- cgit From e914cabd155e0a7fded7b874cef219b904660ec1 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sat, 11 Nov 2023 12:44:59 +0100 Subject: tab list debug (#702) Added /shdebugtablist - Set your clipboard as a fake tab list. #702 --- .../hannibal2/skyhanni/config/commands/Commands.kt | 73 +++++++++++++++++++++- .../skyhanni/test/command/CopyTabListCommand.kt | 27 -------- .../at/hannibal2/skyhanni/utils/TabListData.kt | 46 +++++++++++++- 3 files changed, 114 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/test/command/CopyTabListCommand.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index a2a1468a9..3a36272de 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -46,12 +46,12 @@ import at.hannibal2.skyhanni.test.command.CopyItemCommand import at.hannibal2.skyhanni.test.command.CopyNearbyEntitiesCommand import at.hannibal2.skyhanni.test.command.CopyNearbyParticlesCommand import at.hannibal2.skyhanni.test.command.CopyScoreboardCommand -import at.hannibal2.skyhanni.test.command.CopyTabListCommand import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.test.command.TestChatCommand import at.hannibal2.skyhanni.utils.APIUtil import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.SoundUtils +import at.hannibal2.skyhanni.utils.TabListData import net.minecraft.client.Minecraft import net.minecraft.command.ICommandSender import net.minecraft.event.ClickEvent @@ -260,6 +260,7 @@ object Commands { private fun developersCodingHelp() { registerCommand("shtest", "Unused test command.") { SkyHanniDebugsAndTests.testCommand(it) } registerCommand("shdebugwaypoint", "Mark a waypoint on that location") { SkyHanniDebugsAndTests.waypoint(it) } + registerCommand("shdebugtablist", "Set your clipboard as a fake tab list.") { TabListData.toggleDebugCommand() } registerCommand("shreloadlocalrepo", "Reloading the local repo data") { SkyHanniMod.repo.reloadLocalRepo() } registerCommand("shchathistory", "Show the unfiltered chat history") { ChatManager.openChatFilterGUI() } registerCommand( @@ -278,7 +279,7 @@ object Commands { "shcopyentities", "Copies entities in the specified radius around the player to the clipboard" ) { CopyNearbyEntitiesCommand.command(it) } - registerCommand("shcopytablist", "Copies the tab list data to the clipboard") { CopyTabListCommand.command(it) } + registerCommand("shcopytablist", "Copies the tab list data to the clipboard") { TabListData.copyCommand(it) } registerCommand( "shcopyscoreboard", "Copies the scoreboard data to the clipboard" @@ -428,3 +429,71 @@ object Commands { } } } +/** + * + §r§a§lPlayers §r§f(21) +§8[§r§9307§r§8] §r§c[§r§fYOUTUBE§r§c] Pigicial§r§f §r§7Σ +§8[§r§6409§r§8] §r§6tmoe617 §r§6➶ +§8[§r§5395§r§8] §r§6CraftedFury §r§6§l℻ +§8[§r§d355§r§8] §r§6Mr_Minecraft_Ash §r§7§l:zap: +§8[§r§9304§r§8] §r§6ClockSeller §r§6§lᛝ +§8[§r§3269§r§8] §r§6SubAt0mic §r§7➶ +§8[§r§6402§r§8] §r§bMasterofBoom §r§6〣 +§8[§r§5392§r§8] §r§bIm_Krazy §r§6♔§r§7♲ +§8[§r§5386§r§8] §r§b987654321kaboom §r§6ᛃ +§8[§r§5386§r§8] §r§bEisengolem §r§6⚔ +§8[§r§5369§r§8] §r§bVictone §r§6ᱪ +§8[§r§d330§r§8] §r§bRolexDE §r§6ᛃ +§8[§r§d321§r§8] §r§bshanny_boi +§8[§r§9304§r§8] §r§bRainIsCake +§8[§r§9294§r§8] §r§bCloutCarrot §r§6⚔ +§8[§r§3276§r§8] §r§bderNiklaas §r§7§lツ +§8[§r§b234§r§8] §r§bAnyKun_ §r§6♫ +§8[§r§b231§r§8] §r§bBlackIronSweat §r§7♲ +§8[§r§2179§r§8] §r§bDiabeticShoes §r§7Σ + §r§a§lPlayers §r§f(21) +§8[§r§9282§r§8] §r§bjanaj777 §r§6❁ +§8[§r§e101§r§8] §r§7DomAmelie + §r§3§lServer Info +§b§lArea: §r§7Hub + Server: §r§8mini7B + Gems: §r§a0 + §r§6§lAccount Info +§e§lProfile: §r§aKiwi + Pet Sitter: §r§bN/A + Bank: §r§61B/1B + Interest: §r§e1h 57m +§e§lSkills: §r§aForaging 50: §r§c§lMAX + Speed: §r§f✦400 + Strength: §r§c❁770 + Crit Chance: §r§9☣100 + Crit Damage: §r§9☠454 + Attack Speed: §r§e⚔0 +§e§lEvent: §r§bElection Over! + Starts In: §r§e17 Minutes +§e§lElection: §r§b17 Minutes + §r§aDiana: §r§a|||||||§r§f||| §r§f(70%) + §r§cMarina: §r§c||§r§f|||||||| §r§f(20%) + §r§eFinnegan: §r§e||§r§f|||||||| §r§f(16%) +§8[§9307§8] §cPigicial §7Σ +§8[§9304§8] §6ClockSeller §6§lᛝ +§8[§d355§8] §6Mr_Minecraft_Ash §7§l:zap: +§8[§3269§8] §6SubAt0mic §7➶ +§8[§5395§8] §6CraftedFury §6§l℻ +§8[§6409§8] §6tmoe617 §6➶ +§8[§5386§8] §bEisengolem §6⚔ +§8[§d330§8] §bRolexDE §6ᛃ +§8[§5386§8] §b987654321kaboom §6ᛃ +§8[§5392§8] §bIm_Krazy §6♔§7♲ +§8[§3276§8] §bderNiklaas §7§lツ +§8[§6402§8] §bMasterofBoom §6〣 +§8[§2179§8] §bDiabeticShoes §7Σ +§8[§5369§8] §bVictone §6ᱪ +§8[§b231§8] §bBlackIronSweat §7♲ +§8[§9294§8] §bCloutCarrot §6⚔ +§8[§b234§8] §bAnyKun_ §6♫ +§8[§9304§8] §bRainIsCake +§8[§d321§8] §bshanny_boi +§8[§9282§8] §bjanaj777 §6❁ + * + */ diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyTabListCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyTabListCommand.kt deleted file mode 100644 index a4f287e5b..000000000 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyTabListCommand.kt +++ /dev/null @@ -1,27 +0,0 @@ -package at.hannibal2.skyhanni.test.command - -import at.hannibal2.skyhanni.mixins.transformers.AccessorGuiPlayerTabOverlay -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.conditionalTransform -import at.hannibal2.skyhanni.utils.LorenzUtils.transformIf -import at.hannibal2.skyhanni.utils.OSUtils -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.utils.TabListData -import net.minecraft.client.Minecraft - -object CopyTabListCommand { - fun command(args: Array) { - val resultList = mutableListOf() - val noColor = args.size == 1 && args[0] == "true" - for (line in TabListData.getTabList()) { - val tabListLine = line.transformIf({ noColor }) { removeColor() } - if (tabListLine != "") resultList.add("'$tabListLine'") - } - val tabList = Minecraft.getMinecraft().ingameGUI.tabList as AccessorGuiPlayerTabOverlay - val tabHeader = tabList.header_skyhanni.conditionalTransform(noColor, { unformattedText }, { formattedText }) - val tabFooter = tabList.footer_skyhanni.conditionalTransform(noColor, { unformattedText }, { formattedText }) - val string = "Header:\n\n$tabHeader\n\nBody:\n\n${resultList.joinToString("\n")}\n\nFooter:\n\n$tabFooter" - OSUtils.copyToClipboard(string) - LorenzUtils.chat("§e[SkyHanni] Tab list copied into the clipboard!") - } -} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt b/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt index 252d974ca..67ea197d2 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt @@ -1,10 +1,16 @@ package at.hannibal2.skyhanni.utils +import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.TabListUpdateEvent import at.hannibal2.skyhanni.mixins.hooks.tabListGuard +import at.hannibal2.skyhanni.mixins.transformers.AccessorGuiPlayerTabOverlay +import at.hannibal2.skyhanni.utils.LorenzUtils.conditionalTransform +import at.hannibal2.skyhanni.utils.LorenzUtils.transformIf +import at.hannibal2.skyhanni.utils.StringUtils.removeColor import com.google.common.collect.ComparisonChain import com.google.common.collect.Ordering +import kotlinx.coroutines.launch import net.minecraft.client.Minecraft import net.minecraft.client.network.NetworkPlayerInfo import net.minecraft.world.WorldSettings @@ -16,9 +22,43 @@ class TabListData { companion object { private var cache = emptyList() + private var debugCache: List? = null // TODO replace with TabListUpdateEvent - fun getTabList() = cache + fun getTabList() = debugCache ?: cache + + fun toggleDebugCommand() { + if (debugCache != null) { + LorenzUtils.chat("§e[SkyHanni] Disabled tab list debug.") + debugCache = null + return + } + SkyHanniMod.coroutineScope.launch { + val clipboard = OSUtils.readFromClipboard() ?: return@launch + debugCache = clipboard.lines() + LorenzUtils.chat("§e[SkyHanni] Enabled tab list debug with your clipboard.") + } + } + + fun copyCommand(args: Array) { + if (debugCache != null) { + LorenzUtils.clickableChat("§c[SkyHanni] Tab list debug is enambed!", "shdebugtablist") + return + } + + val resultList = mutableListOf() + val noColor = args.size == 1 && args[0] == "true" + for (line in getTabList()) { + val tabListLine = line.transformIf({ noColor }) { removeColor() } + if (tabListLine != "") resultList.add("'$tabListLine'") + } + val tabList = Minecraft.getMinecraft().ingameGUI.tabList as AccessorGuiPlayerTabOverlay + val tabHeader = tabList.header_skyhanni.conditionalTransform(noColor, { unformattedText }, { formattedText }) + val tabFooter = tabList.footer_skyhanni.conditionalTransform(noColor, { unformattedText }, { formattedText }) + val string = "Header:\n\n$tabHeader\n\nBody:\n\n${resultList.joinToString("\n")}\n\nFooter:\n\n$tabFooter" + OSUtils.copyToClipboard(string) + LorenzUtils.chat("§e[SkyHanni] Tab list copied into the clipboard!") + } } private val playerOrdering = Ordering.from(PlayerComparator()) @@ -60,7 +100,7 @@ class TabListData { val tabList = readTabList() ?: return if (cache != tabList) { cache = tabList - TabListUpdateEvent(cache).postAndCatch() + TabListUpdateEvent(getTabList()).postAndCatch() } } -} \ No newline at end of file +} -- cgit From 18a1b1782d777326f72a3850b88a4286db32f796 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Sat, 11 Nov 2023 11:47:12 +0000 Subject: Fix for Players with Ranks in CompactTab (#701) Fixed YouTuber and Admin getting lost in tab list. #701 --- .../misc/compacttablist/AdvancedPlayerList.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index 05cb64605..382de8bc6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -24,7 +24,7 @@ object AdvancedPlayerList { private val config get() = SkyHanniMod.feature.misc.compactTabList.advancedPlayerList // TODO USE SH-REPO - private val pattern = ".*\\[(?.*)] (?.*)".toPattern() + private val pattern = ".*\\[(?.*)] §r(?.*)".toPattern() private var playerDatas = mutableMapOf() @@ -59,14 +59,21 @@ object AdvancedPlayerList { val playerData = PlayerData(removeColor.toInt()) currentData[line] = playerData + var index = 0 val fullName = group("name") + if (fullName.contains("[")) index++ val name = fullName.split(" ") - val coloredName = name[0] - playerData.coloredName = coloredName + val coloredName = name[index] + if (index == 1) { + playerData.coloredName = name[0] + coloredName + } else { + playerData.coloredName = coloredName + } playerData.name = coloredName.removeColor() playerData.levelText = levelText - if (name.size > 1) { - val nameSuffix = name.drop(1).joinToString(" ") + index++ + if (name.size > index) { + val nameSuffix = name.drop(index).joinToString(" ") playerData.nameSuffix = nameSuffix if (nameSuffix.contains("♲")) { playerData.ironman = true @@ -161,7 +168,7 @@ object AdvancedPlayerList { suffix += " " + getSocialScoreIcon(score) } if (config.markSkyHanniContributors && data.name in contributors) { - suffix += " §c:O" + suffix += "§c:O" } if (IslandType.CRIMSON_ISLE.isInIsland() && !config.hideFactions) { -- cgit From 17cf36176c3c67550273d1143374067e85f654bc Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 12:47:37 +0100 Subject: added empty line --- .../skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index 382de8bc6..a521bb0ed 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -65,7 +65,7 @@ object AdvancedPlayerList { val name = fullName.split(" ") val coloredName = name[index] if (index == 1) { - playerData.coloredName = name[0] + coloredName + playerData.coloredName = name[0] + " " + coloredName } else { playerData.coloredName = coloredName } -- cgit From cc673d9b40b0f4819342bd9530f3b0c38fa7a7ae Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 12:48:56 +0100 Subject: removed comments --- .../hannibal2/skyhanni/config/commands/Commands.kt | 68 ---------------------- 1 file changed, 68 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 3a36272de..dfc76a70a 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -429,71 +429,3 @@ object Commands { } } } -/** - * - §r§a§lPlayers §r§f(21) -§8[§r§9307§r§8] §r§c[§r§fYOUTUBE§r§c] Pigicial§r§f §r§7Σ -§8[§r§6409§r§8] §r§6tmoe617 §r§6➶ -§8[§r§5395§r§8] §r§6CraftedFury §r§6§l℻ -§8[§r§d355§r§8] §r§6Mr_Minecraft_Ash §r§7§l:zap: -§8[§r§9304§r§8] §r§6ClockSeller §r§6§lᛝ -§8[§r§3269§r§8] §r§6SubAt0mic §r§7➶ -§8[§r§6402§r§8] §r§bMasterofBoom §r§6〣 -§8[§r§5392§r§8] §r§bIm_Krazy §r§6♔§r§7♲ -§8[§r§5386§r§8] §r§b987654321kaboom §r§6ᛃ -§8[§r§5386§r§8] §r§bEisengolem §r§6⚔ -§8[§r§5369§r§8] §r§bVictone §r§6ᱪ -§8[§r§d330§r§8] §r§bRolexDE §r§6ᛃ -§8[§r§d321§r§8] §r§bshanny_boi -§8[§r§9304§r§8] §r§bRainIsCake -§8[§r§9294§r§8] §r§bCloutCarrot §r§6⚔ -§8[§r§3276§r§8] §r§bderNiklaas §r§7§lツ -§8[§r§b234§r§8] §r§bAnyKun_ §r§6♫ -§8[§r§b231§r§8] §r§bBlackIronSweat §r§7♲ -§8[§r§2179§r§8] §r§bDiabeticShoes §r§7Σ - §r§a§lPlayers §r§f(21) -§8[§r§9282§r§8] §r§bjanaj777 §r§6❁ -§8[§r§e101§r§8] §r§7DomAmelie - §r§3§lServer Info -§b§lArea: §r§7Hub - Server: §r§8mini7B - Gems: §r§a0 - §r§6§lAccount Info -§e§lProfile: §r§aKiwi - Pet Sitter: §r§bN/A - Bank: §r§61B/1B - Interest: §r§e1h 57m -§e§lSkills: §r§aForaging 50: §r§c§lMAX - Speed: §r§f✦400 - Strength: §r§c❁770 - Crit Chance: §r§9☣100 - Crit Damage: §r§9☠454 - Attack Speed: §r§e⚔0 -§e§lEvent: §r§bElection Over! - Starts In: §r§e17 Minutes -§e§lElection: §r§b17 Minutes - §r§aDiana: §r§a|||||||§r§f||| §r§f(70%) - §r§cMarina: §r§c||§r§f|||||||| §r§f(20%) - §r§eFinnegan: §r§e||§r§f|||||||| §r§f(16%) -§8[§9307§8] §cPigicial §7Σ -§8[§9304§8] §6ClockSeller §6§lᛝ -§8[§d355§8] §6Mr_Minecraft_Ash §7§l:zap: -§8[§3269§8] §6SubAt0mic §7➶ -§8[§5395§8] §6CraftedFury §6§l℻ -§8[§6409§8] §6tmoe617 §6➶ -§8[§5386§8] §bEisengolem §6⚔ -§8[§d330§8] §bRolexDE §6ᛃ -§8[§5386§8] §b987654321kaboom §6ᛃ -§8[§5392§8] §bIm_Krazy §6♔§7♲ -§8[§3276§8] §bderNiklaas §7§lツ -§8[§6402§8] §bMasterofBoom §6〣 -§8[§2179§8] §bDiabeticShoes §7Σ -§8[§5369§8] §bVictone §6ᱪ -§8[§b231§8] §bBlackIronSweat §7♲ -§8[§9294§8] §bCloutCarrot §6⚔ -§8[§b234§8] §bAnyKun_ §6♫ -§8[§9304§8] §bRainIsCake -§8[§d321§8] §bshanny_boi -§8[§9282§8] §bjanaj777 §6❁ - * - */ -- cgit From f4b649b7ff6a0773283f7f8d8462f49d3f81550d Mon Sep 17 00:00:00 2001 From: "Erymanthus[#5074] | (u/)RayDeeUx" <51521765+RayDeeUx@users.noreply.github.com> Date: Sat, 11 Nov 2023 07:15:23 -0500 Subject: Fixed scoreboard date number suffix missing (#684) Fixed scoreboard date number suffix missing sometimes. #684 --- .../java/at/hannibal2/skyhanni/config/features/GUIConfig.java | 9 +++++++++ .../at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src/main') 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 79df5cdd8..992ef03d9 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java @@ -133,6 +133,15 @@ public class GUIConfig { @FeatureToggle public boolean includeSunMoon = true; + @Expose + @ConfigOption( + name = "Show Date Ordinal", + desc = "Show the date's ordinal suffix. Ex: (1st <-> 1, 22nd <-> 22, 23rd <-> 3, 24th <-> 24, etc.)" + ) + @ConfigEditorBoolean + //@FeatureToggle + public boolean includeOrdinal = false; + @Expose @ConfigOption( name = "Refresh Rate", 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 1b08e7ebd..29462b92c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt @@ -17,7 +17,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class InGameDateDisplay { private val config get() = SkyHanniMod.feature.gui.inGameDate private val monthAndDatePattern = - ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}(nd|rd|th|st).*".toPattern() + ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}((nd|rd|th|st)?).*".toPattern() private var display = "" // sun, moon, spooky @@ -43,7 +43,10 @@ class InGameDateDisplay { if (config.useScoreboard) { val list = ScoreboardData.sidebarLinesFormatted //we need this to grab the moon/sun symbol val year = "Year ${date.year}" - val monthAndDate = list.find { monthAndDatePattern.matches(it) } ?: "??" + var monthAndDate = (list.find { monthAndDatePattern.matches(it) } ?: "??").trim() + if (monthAndDate.last().isDigit()) { + monthAndDate = "${monthAndDate}${SkyBlockTime.daySuffix(monthAndDate.takeLast(2).trim().toInt())}" + } val time = list.find { it.lowercase().contains("am ") || it.lowercase().contains("pm ") } ?: "??" theBaseString = "$monthAndDate, $year ${time.trim()}".removeColor() if (!config.includeSunMoon) { @@ -56,6 +59,7 @@ class InGameDateDisplay { else "$theBaseString ☽" } } + if (!config.includeOrdinal) theBaseString = theBaseString.replace("nd", "").replace("rd", "").replace("st", "").replace("th", "") display = theBaseString } -- cgit From e09936d4a6aa2ad405848c57deee60bcddb4ca7c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 13:17:35 +0100 Subject: code cleanup --- .../java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/main') 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 29462b92c..5bacfd047 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt @@ -17,7 +17,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class InGameDateDisplay { private val config get() = SkyHanniMod.feature.gui.inGameDate private val monthAndDatePattern = - ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}((nd|rd|th|st)?).*".toPattern() + ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}(nd|rd|th|st)?.*".toPattern() private var display = "" // sun, moon, spooky @@ -59,10 +59,12 @@ class InGameDateDisplay { else "$theBaseString ☽" } } - if (!config.includeOrdinal) theBaseString = theBaseString.replace("nd", "").replace("rd", "").replace("st", "").replace("th", "") + if (!config.includeOrdinal) theBaseString = theBaseString.removeOrdinal() display = theBaseString } + private fun String.removeOrdinal() = replace("nd", "").replace("rd", "").replace("st", "").replace("th", "") + @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return -- cgit From b5594a9a8744dc2d547393dc7fba27e6452c1af3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 13:18:06 +0100 Subject: /shversion now copies the SkyHanni version into clipboard as well. --- src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 1f8e0a626..a5f0392b9 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -262,7 +262,9 @@ class SkyHanniDebugsAndTests { } fun debugVersion() { - LorenzUtils.chat("§eYou are using SkyHanni ${SkyHanniMod.version}") + val name = "SkyHanni ${SkyHanniMod.version}" + LorenzUtils.chat("§eYou are using $name") + OSUtils.copyToClipboard(name) } fun debugData(args: Array) { -- cgit From 5b5434ccadeb25035235a090de9694eda05e8cd4 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 13:25:02 +0100 Subject: marked hotswap debug as broken --- src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt b/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt index e3acc25e7..20a0d99a5 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/HotSwapDetection.kt @@ -13,7 +13,8 @@ object HotSwapDetection { private var hotswap = false init { - fixedRateTimer(name = "skyhanni-tps-counter-seconds", period = 1000L) { + // TODO seems broken somehow? + fixedRateTimer(name = "skyhanni-hot-swap-detection", period = 1000L) { val currentTick = MinecraftData.totalTicks val diff = currentTick - latestTick latestTick = currentTick -- cgit From 9937b2902ca5204cd5ee33b66b6ca885e21b945b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 13:55:09 +0100 Subject: 0.21 Beta 22 --- CHANGELOG.md | 19 +++++++++++++++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index ea1c3e96d..f9e1c15cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -161,6 +161,11 @@ + Added session/display mode support, added a button to reset the current session, and added the commands /shresetendernodetracker and /shresetarmordroptracker to reset the full data. + Added support for different current sessions per profile for all new trackers: Ender Node, Armor Drop, Dicer Drop, Powder and Slayer Profit Tracker + Added the option to change the Blaze Slayer Dagger GUI positions. - hannibal2 ++ Added more features to the Frozen Treasure Tracker. - hannibal2 + + Added session/display mode support, added a button to reset the current session, and added the commands /shresetfrozentreasuretracker to reset the full data. ++ Added Slayer Profit Tracker support for loot from area mini-bosses. - hannibal2 ++ No longer opening the empty /shdefaultoptions GUI. - walker ++ Added the SkyHanni icon and a link to the GitHub page for MC launchers like Prism to display. - hannibal2 ### Bug Fixes @@ -241,6 +246,14 @@ + Fixed typo in The Art Of Peace. - walker + Fixed compatibility problems with ChatTriggers that caused flickering in the Estimated Item Value while inside the NEU Profile Viewer. - hannibal2 + Fixed Quest Item Helper showing negative numbers. - hannibal2 ++ Fixed YouTuber and Admin ranks getting lost in the tab list. - walker ++ Added a cooldown to the current session tracker reset button to fix the chat spam. - hannibal2 ++ Changed the color of the "Slayer boss soon!" warning from red to yellow. - hannibal2 ++ Fixed a bug where some items were counted twice in the Slayer Profit Tracker. - hannibal2 ++ Fixed item rarity errors in the museum. - hannibal2 ++ Fixed mob highlighting problems with Blaze Slayer and Skytils. - hannibal2 ++ Pablo Helper: Fixed some messages not showing the "get from sack" clickable message. - hannibal2 ++ Fixed scoreboard date number suffixes are missing sometimes. - Erymanthus #### Config @@ -282,6 +295,12 @@ + Added support for migrating parts of the player or session storage. - nea + Changed the config format for dicerRngDrops/dicerDropsTracker. - hannibal2 + Created SkyHanniTracker, the core API for working with tracker stuff. This should be used everywhere someday in the future. - hannibal2 ++ Used SkyHanniTracker in FrozenTreasureTracker. - hannibal2 ++ Added /shdebugwaypoint as a test/debug command. - hannibal2 ++ Added debug messages to detect hot swaps. - hannibal2 ++ Added /shdebugtablist ++ Set your clipboard as a fake tab list. - hannibal2 ++ /shversion now copies the SkyHanni version into the clipboard as well. - hannibal2 ## Version 0.20 diff --git a/build.gradle.kts b/build.gradle.kts index 7c86c21f0..6bb802740 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.21" +version = "0.21.Beta.22" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 4006df431..3f973707d 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -326,7 +326,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.21", + version = "0.21.Beta.22", ) class SkyHanniMod { @Mod.EventHandler -- cgit From a634e3326a484f2048259fb64cba623dbcde4370 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 14:30:29 +0100 Subject: Fixed the leftStronghold area not getting detected. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 ++ .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 18 ++---------------- .../at/hannibal2/skyhanni/data/LocationData.kt | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/LocationData.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 3f973707d..d3b123c7f 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -22,6 +22,7 @@ import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.ItemClickData import at.hannibal2.skyhanni.data.ItemRenderBackground import at.hannibal2.skyhanni.data.ItemTipHelper +import at.hannibal2.skyhanni.data.LocationData import at.hannibal2.skyhanni.data.MayorElection import at.hannibal2.skyhanni.data.MinecraftData import at.hannibal2.skyhanni.data.OtherInventoryData @@ -337,6 +338,7 @@ class SkyHanniMod { loadModule(this) loadModule(ChatManager) loadModule(HypixelData()) + loadModule(LocationData) loadModule(DungeonAPI()) loadModule(ScoreboardData()) loadModule(SeaCreatureFeatures()) diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index 31bb7c047..8b58086a9 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -7,24 +7,18 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent -import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TabListData import net.minecraft.client.Minecraft -import net.minecraft.util.AxisAlignedBB import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.network.FMLNetworkEvent class HypixelData { // TODO USE SH-REPO private val tabListProfilePattern = "§e§lProfile: §r§a(?.*)".toPattern() - private val westVillageFarmArea = AxisAlignedBB(-54.0, 69.0, -115.0, -40.0, 75.0, -127.0) - private val howlingCaveArea = AxisAlignedBB(-401.0, 50.0, -104.0, -337.0, 90.0, 36.0) - private val fakeZealotBruiserHideoutArea = AxisAlignedBB(-520.0, 66.0, -332.0, -558.0, 85.0, -280.0) - private val realZealotBruiserHideoutArea = AxisAlignedBB(-552.0, 50.0, -245.0, -580.0, 72.0, -209.0) companion object { var hypixelLive = false @@ -85,15 +79,7 @@ class HypixelData { .firstOrNull { it.startsWith(" §7⏣ ") || it.startsWith(" §5ф ") } ?.substring(5)?.removeColor() ?: "?" - - skyBlockArea = when { - skyBlockIsland == IslandType.THE_RIFT && westVillageFarmArea.isPlayerInside() -> "Dreadfarm" - skyBlockIsland == IslandType.THE_PARK && howlingCaveArea.isPlayerInside() -> "Howling Cave" - skyBlockIsland == IslandType.THE_END && fakeZealotBruiserHideoutArea.isPlayerInside() -> "The End" - skyBlockIsland == IslandType.THE_END && realZealotBruiserHideoutArea.isPlayerInside() -> "Zealot Bruiser Hideout" - - else -> originalLocation - } + skyBlockArea = LocationData.fixLocation(skyBlockIsland) ?: originalLocation checkProfileName() } @@ -206,4 +192,4 @@ class HypixelData { return scoreboardTitle.contains("SKYBLOCK") || scoreboardTitle.contains("SKIBLOCK") // April 1st jokes are so funny } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt b/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt new file mode 100644 index 000000000..58ffec3f8 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt @@ -0,0 +1,22 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside +import net.minecraft.util.AxisAlignedBB + +object LocationData { + private val westVillageFarmArea = AxisAlignedBB(-54.0, 69.0, -115.0, -40.0, 75.0, -127.0) + private val howlingCaveArea = AxisAlignedBB(-401.0, 50.0, -104.0, -337.0, 90.0, 36.0) + private val fakeZealotBruiserHideoutArea = AxisAlignedBB(-520.0, 66.0, -332.0, -558.0, 85.0, -280.0) + private val realZealotBruiserHideoutArea = AxisAlignedBB(-552.0, 50.0, -245.0, -580.0, 72.0, -209.0) + private val leftStronghold = AxisAlignedBB(-463.7, 94.0, -518.3, -435.3, 115.0, -547.7) + + fun fixLocation(skyBlockIsland: IslandType) = when { + skyBlockIsland == IslandType.THE_RIFT && westVillageFarmArea.isPlayerInside() -> "Dreadfarm" + skyBlockIsland == IslandType.THE_PARK && howlingCaveArea.isPlayerInside() -> "Howling Cave" + skyBlockIsland == IslandType.THE_END && fakeZealotBruiserHideoutArea.isPlayerInside() -> "The End" + skyBlockIsland == IslandType.THE_END && realZealotBruiserHideoutArea.isPlayerInside() -> "Zealot Bruiser Hideout" + skyBlockIsland == IslandType.CRIMSON_ISLE && leftStronghold.isPlayerInside() -> "Stronghold" + + else -> null + } +} -- cgit From 74a3ac9c70238a7154637c9c2c01690ae9d538ab Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 11 Nov 2023 15:13:50 +0100 Subject: Added location fixes to repo. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +-- .../at/hannibal2/skyhanni/config/ConfigManager.kt | 10 +++++++ .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 4 +-- .../java/at/hannibal2/skyhanni/data/IslandType.kt | 7 +++-- .../at/hannibal2/skyhanni/data/LocationData.kt | 22 --------------- .../at/hannibal2/skyhanni/data/LocationFixData.kt | 33 ++++++++++++++++++++++ .../java/at/hannibal2/skyhanni/utils/LorenzVec.kt | 2 ++ .../utils/jsonobjects/LocationFixJson.java | 27 ++++++++++++++++++ 8 files changed, 80 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/LocationData.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/data/LocationFixData.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/LocationFixJson.java (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index d3b123c7f..04eb04834 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -22,7 +22,7 @@ import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.ItemClickData import at.hannibal2.skyhanni.data.ItemRenderBackground import at.hannibal2.skyhanni.data.ItemTipHelper -import at.hannibal2.skyhanni.data.LocationData +import at.hannibal2.skyhanni.data.LocationFixData import at.hannibal2.skyhanni.data.MayorElection import at.hannibal2.skyhanni.data.MinecraftData import at.hannibal2.skyhanni.data.OtherInventoryData @@ -338,7 +338,7 @@ class SkyHanniMod { loadModule(this) loadModule(ChatManager) loadModule(HypixelData()) - loadModule(LocationData) + loadModule(LocationFixData) loadModule(DungeonAPI()) loadModule(ScoreboardData()) loadModule(SeaCreatureFeatures()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index 498b2f489..fd185996e 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.config import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity import at.hannibal2.skyhanni.features.misc.update.UpdateManager import at.hannibal2.skyhanni.utils.LorenzLogger @@ -95,6 +96,15 @@ class ConfigManager { return LorenzRarity.valueOf(reader.nextString()) } }.nullSafe()) + .registerTypeAdapter(IslandType::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: IslandType) { + out.value(value.name) + } + + override fun read(reader: JsonReader): IslandType { + return IslandType.valueOf(reader.nextString()) + } + }.nullSafe()) .enableComplexMapKeySerialization() .create() } diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index 8b58086a9..22beb125e 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -79,7 +79,7 @@ class HypixelData { .firstOrNull { it.startsWith(" §7⏣ ") || it.startsWith(" §5ф ") } ?.substring(5)?.removeColor() ?: "?" - skyBlockArea = LocationData.fixLocation(skyBlockIsland) ?: originalLocation + skyBlockArea = LocationFixData.fixLocation(skyBlockIsland) ?: originalLocation checkProfileName() } @@ -174,7 +174,7 @@ class HypixelData { } private fun getIslandType(newIsland: String, guesting: Boolean): IslandType { - val islandType = IslandType.getBySidebarName(newIsland) + val islandType = IslandType.getByNameOrUnknown(newIsland) if (guesting) { if (islandType == IslandType.PRIVATE_ISLAND) return IslandType.PRIVATE_ISLAND_GUEST if (islandType == IslandType.GARDEN) return IslandType.GARDEN_GUEST diff --git a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt index 15195dec4..3ab213025 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt @@ -28,8 +28,9 @@ enum class IslandType(val displayName: String, val apiName: String = "null") { ; companion object { - fun getBySidebarName(name: String): IslandType { - return entries.firstOrNull { it.displayName == name } ?: UNKNOWN - } + fun getByNameOrUnknown(name: String) = getByNameOrNull(name) ?: UNKNOWN + fun getByName(name: String) = getByNameOrNull(name) ?: error("IslandType not found: '$name'") + + fun getByNameOrNull(name: String) = entries.firstOrNull { it.displayName == name } } } diff --git a/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt b/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt deleted file mode 100644 index 58ffec3f8..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/LocationData.kt +++ /dev/null @@ -1,22 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside -import net.minecraft.util.AxisAlignedBB - -object LocationData { - private val westVillageFarmArea = AxisAlignedBB(-54.0, 69.0, -115.0, -40.0, 75.0, -127.0) - private val howlingCaveArea = AxisAlignedBB(-401.0, 50.0, -104.0, -337.0, 90.0, 36.0) - private val fakeZealotBruiserHideoutArea = AxisAlignedBB(-520.0, 66.0, -332.0, -558.0, 85.0, -280.0) - private val realZealotBruiserHideoutArea = AxisAlignedBB(-552.0, 50.0, -245.0, -580.0, 72.0, -209.0) - private val leftStronghold = AxisAlignedBB(-463.7, 94.0, -518.3, -435.3, 115.0, -547.7) - - fun fixLocation(skyBlockIsland: IslandType) = when { - skyBlockIsland == IslandType.THE_RIFT && westVillageFarmArea.isPlayerInside() -> "Dreadfarm" - skyBlockIsland == IslandType.THE_PARK && howlingCaveArea.isPlayerInside() -> "Howling Cave" - skyBlockIsland == IslandType.THE_END && fakeZealotBruiserHideoutArea.isPlayerInside() -> "The End" - skyBlockIsland == IslandType.THE_END && realZealotBruiserHideoutArea.isPlayerInside() -> "Zealot Bruiser Hideout" - skyBlockIsland == IslandType.CRIMSON_ISLE && leftStronghold.isPlayerInside() -> "Stronghold" - - else -> null - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/data/LocationFixData.kt b/src/main/java/at/hannibal2/skyhanni/data/LocationFixData.kt new file mode 100644 index 000000000..2bd6a9dcb --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/LocationFixData.kt @@ -0,0 +1,33 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.utils.LocationUtils.isPlayerInside +import at.hannibal2.skyhanni.utils.jsonobjects.LocationFixJson +import net.minecraft.util.AxisAlignedBB +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object LocationFixData { + private var locationFixes = mutableListOf() + + class LocationFix(val island: IslandType, val area: AxisAlignedBB, val realLocation: String) + + // priority set to low so that IslandType can load their island names from repo earlier + @SubscribeEvent(priority = EventPriority.LOW) + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant("LocationFix") + locationFixes.clear() + + for (fix in data.locationFixes.values) { + val island = IslandType.getByName(fix.island_name) + val area = fix.a.axisAlignedTo(fix.b) + val realLocation = fix.real_location + + locationFixes.add(LocationFix(island, area, realLocation)) + } + } + + fun fixLocation(skyBlockIsland: IslandType) = locationFixes + .firstOrNull { skyBlockIsland == it.island && it.area.isPlayerInside() } + ?.realLocation +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt index 339a16efc..fd38fd441 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzVec.kt @@ -130,6 +130,8 @@ data class LorenzVec( return LorenzVec(scalar * x, scalar * y, scalar * z) } + fun axisAlignedTo(other: LorenzVec) = AxisAlignedBB(x, y, z, other.x, other.y, other.z) + companion object { fun getFromYawPitch(yaw: Double, pitch: Double): LorenzVec { val yaw: Double = (yaw + 90) * Math.PI / 180 diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/LocationFixJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/LocationFixJson.java new file mode 100644 index 000000000..802627e7a --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/LocationFixJson.java @@ -0,0 +1,27 @@ +package at.hannibal2.skyhanni.utils.jsonobjects; + +import at.hannibal2.skyhanni.utils.LorenzVec; +import com.google.gson.annotations.Expose; + +import java.util.Map; + +public class LocationFixJson { + + @Expose + public Map locationFixes; + + public static class LocationFix { + @Expose + public LorenzVec a; + + @Expose + public LorenzVec b; + + @Expose + public String island_name; + + @Expose + public String real_location; + } + +} -- cgit From 669ea76011e12b8befb853b5e9c9e8070bc504de Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 10:15:22 +0100 Subject: Fixed ConcurrentModificationException in AshfangBlazes. --- .../features/nether/ashfang/AshfangBlazes.kt | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt index 28ff6f7df..b5aff0bf4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazes.kt @@ -14,6 +14,7 @@ import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.EntityUtils.getAllNameTagsWith import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy import net.minecraft.entity.EntityLivingBase import net.minecraft.entity.item.EntityArmorStand import net.minecraft.entity.monster.EntityBlaze @@ -25,9 +26,9 @@ class AshfangBlazes { private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang private val blazeColor = mutableMapOf() - private val blazeArmorStand = mutableMapOf() + private var blazeArmorStand = mapOf() - var nearAshfang = false + private var nearAshfang = false @SubscribeEvent fun onTick(event: LorenzTickEvent) { @@ -43,19 +44,21 @@ class AshfangBlazes { val list = entity.getAllNameTagsWith(2, "Ashfang") if (list.size == 1) { val armorStand = list[0] - blazeArmorStand[entity] = armorStand val color = when { armorStand.name.contains("Ashfang Follower") -> LorenzColor.DARK_GRAY armorStand.name.contains("Ashfang Underling") -> LorenzColor.RED armorStand.name.contains("Ashfang Acolyte") -> LorenzColor.BLUE else -> { - blazeArmorStand.remove(entity) - null + blazeArmorStand = blazeArmorStand.editCopy { + remove(entity) + } + continue } } - color?.let { - blazeColor[entity] = it + blazeArmorStand = blazeArmorStand.editCopy { + this[entity] = armorStand } + blazeColor[entity] = color } } } @@ -69,7 +72,9 @@ class AshfangBlazes { if (entityId !in blazeArmorStand.keys.map { it.entityId }) return if (event.health % 10_000_000 != 0) { - blazeArmorStand.keys.removeIf { it.entityId == entityId } + blazeArmorStand = blazeArmorStand.editCopy { + keys.removeIf { it.entityId == entityId } + } } } @@ -112,7 +117,7 @@ class AshfangBlazes { @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { blazeColor.clear() - blazeArmorStand.clear() + blazeArmorStand = emptyMap() } @SubscribeEvent @@ -125,4 +130,4 @@ class AshfangBlazes { private fun isEnabled(): Boolean { return LorenzUtils.inSkyBlock && DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) } -} \ No newline at end of file +} -- cgit From 3955895537e2e5f18036b671d0fb692dcbb1ae2b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 10:22:02 +0100 Subject: added debug information for PetExpTooltip crash --- .../skyhanni/features/misc/PetExpTooltip.kt | 64 ++++++++++++++++------ 1 file changed, 46 insertions(+), 18 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/PetExpTooltip.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/PetExpTooltip.kt index 010b2530d..467dad0ff 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/PetExpTooltip.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/PetExpTooltip.kt @@ -2,7 +2,9 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzRarity @@ -23,6 +25,7 @@ class PetExpTooltip { private val level100Common = 5_624_785 private val level100Legendary = 25_353_230 private val level200 = 210_255_385 + private var debugInfoPrinted = false @SubscribeEvent(priority = EventPriority.LOWEST) fun onItemTooltipLow(event: ItemTooltipEvent) { @@ -33,23 +36,44 @@ class PetExpTooltip { val itemStack = event.itemStack ?: return val petExperience = itemStack.getPetExp()?.round(1) ?: return val name = itemStack.name ?: return - - val index = findIndex(event.toolTip) ?: return - - val (maxLevel, maxXp) = getMaxValues(name, petExperience) - - val percentage = petExperience / maxXp - val percentageFormat = LorenzUtils.formatPercentage(percentage) - - event.toolTip.add(index, " ") - if (percentage >= 1) { - event.toolTip.add(index, "§7Total experience: §e${NumberUtil.format(petExperience)}") - } else { - val progressBar = StringUtils.progressBar(percentage) - val isBelowLegendary = itemStack.getItemRarityOrNull()?.let { it < LorenzRarity.LEGENDARY } ?: false - val addLegendaryColor = if (isBelowLegendary) "§6" else "" - event.toolTip.add(index, "$progressBar §e${petExperience.addSeparators()}§6/§e${NumberUtil.format(maxXp)}") - event.toolTip.add(index, "§7Progress to ${addLegendaryColor}Level $maxLevel: §e$percentageFormat") + try { + + val index = findIndex(event.toolTip) ?: return + + val (maxLevel, maxXp) = getMaxValues(name, petExperience) + + val percentage = petExperience / maxXp + val percentageFormat = LorenzUtils.formatPercentage(percentage) + + event.toolTip.add(index, " ") + if (percentage >= 1) { + event.toolTip.add(index, "§7Total experience: §e${NumberUtil.format(petExperience)}") + } else { + val progressBar = StringUtils.progressBar(percentage) + val isBelowLegendary = itemStack.getItemRarityOrNull()?.let { it < LorenzRarity.LEGENDARY } ?: false + val addLegendaryColor = if (isBelowLegendary) "§6" else "" + event.toolTip.add( + index, + "$progressBar §e${petExperience.addSeparators()}§6/§e${NumberUtil.format(maxXp)}" + ) + event.toolTip.add(index, "§7Progress to ${addLegendaryColor}Level $maxLevel: §e$percentageFormat") + } + } catch (e: Exception) { + if (!debugInfoPrinted) { + println(" ") + println("PetExpTooltip debug:") + println("itemStack: $itemStack") + println("itemStack.name: $name") + println("petExperience: $petExperience") + println("event.toolTip: ${event.toolTip}") + println(" ") + println("findIndex(event.toolTip): ${findIndex(event.toolTip)}") + println(" ") + println("itemStack.getLore(): ${itemStack.getLore()}") + println(" ") + debugInfoPrinted = true + } + ErrorManager.logError(e, "Could not add pet exp tooltip. Show the console for more info") } } @@ -100,6 +124,10 @@ class PetExpTooltip { fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "misc.petExperienceToolTip.petDisplay", "misc.pets.petExperienceToolTip.petDisplay") event.move(3, "misc.petExperienceToolTip.showAlways", "misc.pets.petExperienceToolTip.showAlways") - event.move(3, "misc.petExperienceToolTip.showGoldenDragonEgg", "misc.pets.petExperienceToolTip.showGoldenDragonEgg") + event.move( + 3, + "misc.petExperienceToolTip.showGoldenDragonEgg", + "misc.pets.petExperienceToolTip.showGoldenDragonEgg" + ) } } -- cgit From 3c46a9936206e6c1cd2f9760de9a311c0566d6fd Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 11:02:34 +0100 Subject: Fixed dungeon level being 0 in skill inventory. --- .../inventory/ItemDisplayOverlayFeatures.kt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt index 31c606d55..739ba6a1b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt @@ -95,27 +95,29 @@ class ItemDisplayOverlayFeatures { } } - if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(9) && InventoryUtils.openInventoryName() == "Your Skills" && item.getLore().any { it.contains("Click to view!") }) { + if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(9) && + InventoryUtils.openInventoryName() == "Your Skills" && + item.getLore().any { it.contains("Click to view!") }) { if (CollectionAPI.isCollectionTier0(item.getLore())) return "0" val split = itemName.split(" ") - if (split.size < 2) return "0" if (!itemName.contains("Dungeon")) { val text = split.last() + if (split.size < 2) return "0" return "" + text.romanToDecimalIfNeeded() } } if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(10) && InventoryUtils.openInventoryName().endsWith(" Collections")) { - val lore = item.getLore() - if (lore.any { it.contains("Click to view!") }) { - if (CollectionAPI.isCollectionTier0(lore)) return "0" - item.name?.let { - if (it.startsWith("§e")) { - val text = it.split(" ").last() - return "" + text.romanToDecimalIfNeeded() - } + val lore = item.getLore() + if (lore.any { it.contains("Click to view!") }) { + if (CollectionAPI.isCollectionTier0(lore)) return "0" + item.name?.let { + if (it.startsWith("§e")) { + val text = it.split(" ").last() + return "" + text.romanToDecimalIfNeeded() } } + } } if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(11) && itemName.contains("Rancher's Boots")) { -- cgit From 6769be83e485ffa961937e54ffab327c6f2c32f5 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 11:07:33 +0100 Subject: Fixed showing minion level as 101 in some menus. --- .../skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt index 739ba6a1b..aa3a46ed2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt @@ -73,7 +73,9 @@ class ItemDisplayOverlayFeatures { } } - if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(5) && itemName.contains(" Minion ") && item.getLore().any { it.contains("Place this minion") }) { + if (SkyHanniMod.feature.inventory.itemNumberAsStackSize.contains(5) && itemName.contains(" Minion ") && + !itemName.contains("Recipe") && item.getLore().any { it.contains("Place this minion") } + ) { val array = itemName.split(" ") val last = array[array.size - 1] return last.romanToDecimal().toString() -- cgit From eca09ec6ed5cbb5d3990d99ae5658776d192d6af Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 12:08:33 +0100 Subject: 0.21 Beta 23 --- CHANGELOG.md | 7 +++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index f9e1c15cc..f03902351 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -254,6 +254,11 @@ + Fixed mob highlighting problems with Blaze Slayer and Skytils. - hannibal2 + Pablo Helper: Fixed some messages not showing the "get from sack" clickable message. - hannibal2 + Fixed scoreboard date number suffixes are missing sometimes. - Erymanthus ++ Fixed the leftStronghold area not getting detected. - hannibal2 ++ Fixed error message with Ashfang Blazes. - hannibal2 ++ Fixed crash with pet exp tooltip. - hannibal2 ++ Fixed dungeoneering showing as 0 in the skill menu. - hannibal2 ++ Fixed showing minion level as 101 in some menus. - hannibal2 #### Config @@ -301,6 +306,8 @@ + Added /shdebugtablist + Set your clipboard as a fake tab list. - hannibal2 + /shversion now copies the SkyHanni version into the clipboard as well. - hannibal2 ++ Moved location fixes to the repo. - hannibal2 ++ Added debug information for PetExpTooltip crash. - hannibal2 ## Version 0.20 diff --git a/build.gradle.kts b/build.gradle.kts index 6bb802740..ae38cc693 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.22" +version = "0.21.Beta.23" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 04eb04834..4b33ae5be 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -327,7 +327,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.22", + version = "0.21.Beta.23", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 7218a8f900c29521b152a0e616d7b75cc509840b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 12 Nov 2023 21:15:34 +0100 Subject: 0.21 --- CHANGELOG.md | 2 +- build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index ebfd678b3..812a00d6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # SkyHanni - Change Log -## Version 0.21 (unreleased) +## Version 0.21 ### New Features diff --git a/build.gradle.kts b/build.gradle.kts index ae38cc693..3b4beaf40 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.Beta.23" +version = "0.21" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 4b33ae5be..b299a4af8 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -327,7 +327,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.Beta.23", + version = "0.21", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 72015368502f5e1bb35b6cc4e70fbf62981b92a0 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:00:31 +0100 Subject: Fixed showing "slayer boss spawn soon" message outside correct slayer area. --- .../java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt index e7b7fe0e5..2bfdf640f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerBossSpawnSoon.kt @@ -21,6 +21,7 @@ class SlayerBossSpawnSoon { @SubscribeEvent fun onSlayerProgressChange(event: SlayerProgressChangeEvent) { if (!isEnabled()) return + if (!SlayerAPI.isInCorrectArea) return val completion = pattern.matchMatcher(event.newProgress.removeColor()) { group("progress").formatNumber().toFloat() / group("total").formatNumber().toFloat() -- cgit From ac7b96126d41f18325220e217e89e74460ba07f6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:02:05 +0100 Subject: Fixed highlighting some mobs in dungeon wrongly as area mini bosses. --- src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt | 6 +++++- .../skyhanni/features/combat/mobs/AreaMiniBossFeatures.kt | 7 ++++--- src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt index c827a9f53..7a2243fbc 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt @@ -28,6 +28,7 @@ object SlayerAPI { var questStartTime = 0L var isInCorrectArea = false + var isInAnyArea = false var latestSlayerCategory = "" private var latestProgressChangeTime = 0L var latestWrongAreaWarning = 0L @@ -122,9 +123,12 @@ object SlayerAPI { if (event.isMod(5)) { isInCorrectArea = if (LorenzUtils.isStrandedProfile) { + isInAnyArea = true true } else { - getSlayerTypeForCurrentArea() == getActiveSlayer() + val slayerTypeForCurrentArea = getSlayerTypeForCurrentArea() + isInAnyArea = slayerTypeForCurrentArea != null + slayerTypeForCurrentArea == getActiveSlayer() } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/AreaMiniBossFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/AreaMiniBossFeatures.kt index e63119a11..97d891020 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/AreaMiniBossFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/AreaMiniBossFeatures.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.combat.mobs import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent @@ -47,8 +48,8 @@ class AreaMiniBossFeatures { if (config.areaBossHighlight) { val color = bossType.color.toColor().withAlpha(bossType.colorOpacity) RenderLivingEntityHelper.setEntityColor(entity, color) - { config.areaBossHighlight } - RenderLivingEntityHelper.setNoHurtTime(entity) { config.areaBossHighlight } + { config.areaBossHighlight && SlayerAPI.isInAnyArea } + RenderLivingEntityHelper.setNoHurtTime(entity) { config.areaBossHighlight && SlayerAPI.isInAnyArea } } // TODO add sound @@ -118,4 +119,4 @@ class AreaMiniBossFeatures { ), ; } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index a5f0392b9..763b4602e 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -322,6 +322,7 @@ class SkyHanniDebugsAndTests { builder.append("Doing slayer!\n") builder.append(" activeSlayer: ${SlayerAPI.getActiveSlayer()}\n") builder.append(" isInCorrectArea: ${SlayerAPI.isInCorrectArea}\n") + builder.append(" isInAnyArea: ${SlayerAPI.isInAnyArea}\n") } } -- cgit From 8b353175fbff69e0baffadbb0c4857515f3add00 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 13 Nov 2023 20:03:49 +0100 Subject: typos --- .../skyhanni/features/garden/farming/ArmorDropTracker.kt | 2 +- .../skyhanni/features/slayer/SlayerProfitTracker.kt | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt index ac9f36190..21c271e49 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt @@ -73,7 +73,7 @@ object ArmorDropTracker { } private fun drawDisplay(data: Data): List> = buildList { - addAsSingletonList("§7RNG Drops for Farming Armor:") + addAsSingletonList("§7Armor Drop Tracker:") for ((drop, amount) in data.drops.sortedDesc()) { val dropName = drop.dropName addAsSingletonList(" §7- §e${amount.addSeparators()}x $dropName") diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index 43f609f10..7dbd4a7c3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -52,7 +52,7 @@ object SlayerProfitTracker { } @Expose - var items: MutableMap = HashMap() + var items: MutableMap = HashMap() @Expose var mobKillCoins: Long = 0 @@ -63,7 +63,7 @@ object SlayerProfitTracker { @Expose var slayerCompletedCount = 0 - class SlayerItemProfit { + class SlayerItem { @Expose var internalName: NEUInternalName? = null @@ -76,7 +76,7 @@ object SlayerProfitTracker { @Expose var hidden = false - override fun toString() = "SlayerItemProfit{" + + override fun toString() = "SlayerItem{" + "internalName='" + internalName + '\'' + ", timesDropped=" + timesDropped + ", totalAmount=" + totalAmount + @@ -84,7 +84,7 @@ object SlayerProfitTracker { '}' } - override fun toString() = "SlayerProfitList{" + + override fun toString() = "SlayerProfitTracker.Data{" + "items=" + items + ", mobKillCoins=" + mobKillCoins + ", slayerSpawnCost=" + slayerSpawnCost + @@ -135,10 +135,10 @@ object SlayerProfitTracker { private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { getTracker()?.modify { - val slayerItemProfit = it.items.getOrPut(internalName) { Data.SlayerItemProfit() } + val slayerItem = it.items.getOrPut(internalName) { Data.SlayerItem() } - slayerItemProfit.timesDropped++ - slayerItemProfit.totalAmount += stackSize + slayerItem.timesDropped++ + slayerItem.totalAmount += stackSize } } -- cgit From 791905a8ac2e3aee650ba8d04fc8a853ab8fcdca Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:15:06 +0100 Subject: mark anyContains as deprecated --- src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt | 1 + 1 file changed, 1 insertion(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 4f0704ead..e90f8ee34 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -535,5 +535,6 @@ object LorenzUtils { TitleManager.sendTitle(text, duration, height) } + @Deprecated("Dont use this approach at all. check with regex or equals instead.", ReplaceWith("Regex or equals")) fun Iterable.anyContains(element: String) = any { it.contains(element) } } -- cgit From ef61176292763768d1f7e12e5113d7a2f76d0c9c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:23:05 +0100 Subject: more exact checks for fandom wiki click check: fixed blocking clicks on bazaar with player name "wiki" --- .../java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt index 44d4b94ed..eb658b865 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/FandomWikiFromMenus.kt @@ -8,7 +8,6 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.nameWithEnchantment import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.anyContains import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import io.github.moulberry.notenoughupdates.events.SlotClickEvent @@ -56,8 +55,8 @@ class FandomWikiFromMenus { } else { //.lowercase() to match "Wiki!" and ".*wiki.*" lore lines in one fell swoop val inThirdWikiInventory = // TODO better name for this inventory - (itemClickedStack.getLore().anyContains("Wiki") || itemClickedStack.getLore().anyContains("wiki")) - && !itemClickedStack.getLore().anyContains("wikipedia") + (itemClickedStack.getLore() + .let { it.any { line -> line == "§7§eClick to view on the SkyBlock" } && it.last() == "§eWiki!" }) if (inThirdWikiInventory) { wikiDisplayName = itemClickedName.removeColor().replace("✔ ", "").replace("✖ ", "") wikiInternalName = wikiDisplayName -- cgit From 9878714850a75cf0b2b6cf1ec5f3a8d13a740543 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 15 Nov 2023 05:44:08 -0400 Subject: Fix new visitor alerts triggering constantly (#704) Fixed new visitor alerts triggering wrongly and constantly. #704 --- .../at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt index 85aef6868..a1e7473a7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt @@ -75,7 +75,7 @@ class VisitorListener { } if (!found) continue - if (line.isEmpty()) { + if (line.isEmpty() || line.contains("Account Info")) { found = false continue } -- cgit From bcc712b14495015d5a0d53cb54355b379e32f000 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:50:13 +0100 Subject: Fixed showing "slayer boss spawn soon" message outside correct slayer area v2. --- src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt index 7a2243fbc..2a6b99297 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SlayerAPI.kt @@ -128,7 +128,7 @@ object SlayerAPI { } else { val slayerTypeForCurrentArea = getSlayerTypeForCurrentArea() isInAnyArea = slayerTypeForCurrentArea != null - slayerTypeForCurrentArea == getActiveSlayer() + slayerTypeForCurrentArea == getActiveSlayer() && slayerTypeForCurrentArea != null } } } -- cgit From 05acdf4a23666d576500d5fc32479c20cad2571a Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Wed, 15 Nov 2023 10:05:52 +0000 Subject: Update messages to match Hypixel Changes (#706) Fixed wrong fungi cutter mode warning not working. #706 --- .../skyhanni/features/garden/farming/WrongFungiCutterWarning.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt index 46936a7bb..03a48d820 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt @@ -23,7 +23,7 @@ class WrongFungiCutterWarning { if (message == "§eFungi Cutter Mode: §r§cRed Mushrooms") { mode = FungiMode.RED } - if (message == "§eFungi Cutter Mode: §r§cBrown Mushrooms") { + if (message == "§eFungi Cutter Mode: §r§6Brown Mushrooms") { mode = FungiMode.BROWN } } @@ -62,12 +62,13 @@ class WrongFungiCutterWarning { } private fun readItem(item: ItemStack) { + // TODO Update to use NBT data: fungi_cutter_mode: "BROWN" for (line in item.getLore()) { if (line == "§eMode: §cRed Mushrooms") { mode = FungiMode.RED } - if (line == "§eMode: §cBrown Mushrooms") { + if (line == "§eMode: §6Brown Mushrooms") { mode = FungiMode.BROWN } } @@ -78,4 +79,4 @@ class WrongFungiCutterWarning { BROWN, UNKNOWN } -} \ No newline at end of file +} -- cgit From aa9fe2a83cf65fcd28026db8f0bc9ed1723d49d5 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:09:36 +0100 Subject: Using fungi_cutter_mode instead of reading item lore --- .../garden/farming/WrongFungiCutterWarning.kt | 25 +++++++++++----------- .../skyhanni/utils/SkyBlockItemModifierUtils.kt | 2 ++ 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt index 03a48d820..e7bdce1db 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WrongFungiCutterWarning.kt @@ -6,8 +6,9 @@ import at.hannibal2.skyhanni.events.CropClickEvent import at.hannibal2.skyhanni.events.GardenToolChangeEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.features.garden.CropType -import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFungiCutterMode import at.hannibal2.skyhanni.utils.SoundUtils import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -55,28 +56,26 @@ class WrongFungiCutterWarning { @SubscribeEvent fun onGardenToolChange(event: GardenToolChangeEvent) { if (event.crop == CropType.MUSHROOM) { - readItem(event.toolItem!!) + readItem(event.toolItem ?: error("Tool item is null")) } else { mode = FungiMode.UNKNOWN } } private fun readItem(item: ItemStack) { - // TODO Update to use NBT data: fungi_cutter_mode: "BROWN" - for (line in item.getLore()) { - if (line == "§eMode: §cRed Mushrooms") { - mode = FungiMode.RED - } - - if (line == "§eMode: §6Brown Mushrooms") { - mode = FungiMode.BROWN - } - } + val rawMode = item.getFungiCutterMode() ?: error("Tool without fungi cutter mode: '${item.name}'") + mode = FungiMode.getOrNull(rawMode) } enum class FungiMode { RED, BROWN, - UNKNOWN + UNKNOWN, + ; + + companion object { + fun getOrNull(mode: String) = + entries.firstOrNull { it.name == mode } ?: error("Unknown fungi mode: '$mode'") + } } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt index 7f6cc7623..8d600f70e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt @@ -117,6 +117,8 @@ object SkyBlockItemModifierUtils { fun ItemStack.getArmorDye() = getAttributeString("dye_item")?.asInternalName() + fun ItemStack.getFungiCutterMode() = getAttributeString("fungi_cutter_mode") + fun ItemStack.getRune(): NEUInternalName? { val runesMap = getExtraAttributes()?.getCompoundTag("runes") ?: return null val runesList = runesMap.keySet.associateWith { runesMap.getInteger(it) }.toList() -- cgit From d10a09fa651aa9da8b842a21f0b25fc27594c1b2 Mon Sep 17 00:00:00 2001 From: Vixid <52578495+VixidDev@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:13:27 +0000 Subject: Add delay before toggling borders (#708) Added short delay for toggling borders, fixed flickering bugs. #708 --- .../at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt index c7d27d873..e3f0c1386 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt @@ -6,15 +6,18 @@ import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.draw3DLine +import at.hannibal2.skyhanni.utils.SimpleTimeMark import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import org.lwjgl.input.Keyboard import java.awt.Color import kotlin.math.floor +import kotlin.time.Duration.Companion.milliseconds class GardenPlotBorders { private val config get() = SkyHanniMod.feature.garden.plotBorders + private var timeLastSaved = SimpleTimeMark.farPast() private var showBorders = false private val LINE_COLOR = LorenzColor.YELLOW.toColor() @@ -25,12 +28,16 @@ class GardenPlotBorders { @SubscribeEvent fun onKeyClick(event: LorenzKeyPressEvent) { if (!isEnabled()) return + if (timeLastSaved.passedSince() < 250.milliseconds) return + if (event.keyCode == Keyboard.KEY_G && Keyboard.isKeyDown(Keyboard.KEY_F3)) { showBorders = !showBorders } if (event.keyCode == Keyboard.KEY_F3 && Keyboard.isKeyDown(Keyboard.KEY_G)) { showBorders = !showBorders } + + timeLastSaved = SimpleTimeMark.now() } @SubscribeEvent -- cgit From 3d5c4d59d61c099cfc74cf04c0a875158bfec895 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:15:36 +0100 Subject: better logic --- .../java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt index e3f0c1386..d5d00d509 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenPlotBorders.kt @@ -31,13 +31,13 @@ class GardenPlotBorders { if (timeLastSaved.passedSince() < 250.milliseconds) return if (event.keyCode == Keyboard.KEY_G && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + timeLastSaved = SimpleTimeMark.now() showBorders = !showBorders } if (event.keyCode == Keyboard.KEY_F3 && Keyboard.isKeyDown(Keyboard.KEY_G)) { + timeLastSaved = SimpleTimeMark.now() showBorders = !showBorders } - - timeLastSaved = SimpleTimeMark.now() } @SubscribeEvent -- cgit From 3604594ba19899e7732b405f047c69ad7b1ab3da Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 11:57:20 +0100 Subject: Fixed Maximum FF Needed display not showing in Jacob NPC menu. --- .../features/garden/contest/ContestBracket.kt | 6 +++-- .../features/garden/contest/FarmingContestAPI.kt | 31 +++++++++++++--------- .../garden/contest/JacobContestFFNeededDisplay.kt | 2 +- 3 files changed, 24 insertions(+), 15 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt index 4218f0e41..9ee04d3fc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/ContestBracket.kt @@ -1,11 +1,13 @@ package at.hannibal2.skyhanni.features.garden.contest enum class ContestBracket(val color: String) { + DIAMOND("b"), + PLATINUM("3"), GOLD("6"), SILVER("f"), BRONZE("c"), ; val displayName = "§$color§l$name" - val pattern = "$displayName §7\\(§bTop \\d{1,2}%§7\\): §$color(?.*)".toPattern() -} \ No newline at end of file + val pattern = "$displayName §7\\(§bTop \\d{1,2}%§7\\): §6(?.*)".toPattern() +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt index 50985ecfe..c5bb8d2a8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt @@ -10,6 +10,7 @@ import at.hannibal2.skyhanni.features.garden.CropType import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -120,12 +121,15 @@ object FarmingContestAPI { cropPattern.matchMatcher(it) { CropType.getByName(group("crop")) } } ?: error("Crop not found in lore!") - val brackets = ContestBracket.entries.associateWith { bracket -> - lore.firstNotNullOfOrNull { - bracket.pattern.matchMatcher(it) { - group("amount").replace(",", "").toInt() - } - } ?: error("Farming contest bracket not found in lore!") + val brackets = buildMap { + for (bracket in ContestBracket.entries) { + val amount = lore.firstNotNullOfOrNull { + bracket.pattern.matchMatcher(it) { + group("amount").replace(",", "").toInt() + } + } ?: continue + put(bracket, amount) + } } return FarmingContest(time, crop, brackets) @@ -137,15 +141,18 @@ object FarmingContestAPI { fun calculateAverages(crop: CropType): Pair> { var amount = 0 - val map = mutableMapOf() + val crops = mutableMapOf() + val contests = mutableMapOf() for (contest in getContestsOfType(crop).associateWith { it.time }.sortedDesc().keys) { amount++ - for ((bracket, count) in contest.brackets) { - val old = map.getOrDefault(bracket, 0) - map[bracket] = count + old + val brackets = contest.brackets + for ((bracket, count) in brackets) { + val old = crops.getOrDefault(bracket, 0) + crops[bracket] = count + old + contests.addOrPut(bracket, 1) } if (amount == 10) break } - return Pair(amount, map.mapValues { (_, counter) -> counter / amount }) + return Pair(amount, crops.mapValues { (bracket, counter) -> counter / contests[bracket]!! }) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt index e02b358b9..bcdc6b216 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt @@ -116,7 +116,7 @@ class JacobContestFFNeededDisplay { } private fun getLine(bracket: ContestBracket, map: Map, crop: CropType): String { - val counter = map[bracket]!! + val counter = map[bracket] ?: return " ${bracket.displayName}§f: §8Not found!" val blocksPerSecond = crop.getRealBlocksPerSecond() val cropsPerSecond = counter.toDouble() / blocksPerSecond / 60 val farmingFortune = formatFarmingFortune(cropsPerSecond * 100 / 20 / crop.baseDrops) -- cgit From d1df749da1a58f0f3d8712b22341b59cc652a11b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:18:18 +0100 Subject: Added mythic visitor support. --- .../features/garden/visitor/GardenVisitorDropStatistics.kt | 5 +++-- src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index 2213f9482..860213e9e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.events.garden.visitor.VisitorAcceptEvent import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy @@ -115,7 +116,7 @@ object GardenVisitorDropStatistics { private fun setRarities(rarity: String) { acceptedVisitors += 1 - val currentRarity = VisitorRarity.valueOf(rarity) + val currentRarity = LorenzUtils.enumValueOf(rarity) val visitorRarities = GardenAPI.storage?.visitorDrops?.visitorRarities ?: return val temp = visitorRarities[currentRarity.ordinal] + 1 visitorRarities[currentRarity.ordinal] = temp @@ -243,5 +244,5 @@ object GardenVisitorDropStatistics { } enum class VisitorRarity { - UNCOMMON, RARE, LEGENDARY, SPECIAL, + UNCOMMON, RARE, LEGENDARY, MYTHIC, SPECIAL, } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index e90f8ee34..2e71ab2fa 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -537,4 +537,13 @@ object LorenzUtils { @Deprecated("Dont use this approach at all. check with regex or equals instead.", ReplaceWith("Regex or equals")) fun Iterable.anyContains(element: String) = any { it.contains(element) } + + inline fun > enumValueOfOrNull(name: String): T? { + val enums = enumValues() + return enums.firstOrNull { it.name == name } + } + + inline fun > enumValueOf(name: String) = + enumValueOfOrNull(name) + ?: kotlin.error("Unknown enum constant for ${enumValues().first().name.javaClass.simpleName}: '$name'") } -- cgit From 32ff726edba446405e0cc7315e7d87b6fa1cd03f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 13:05:25 +0100 Subject: Added mythic visitor support. --- src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt | 4 ++-- .../features/garden/visitor/GardenVisitorColorNames.kt | 12 ++---------- .../at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java | 6 +++++- 3 files changed, 9 insertions(+), 13 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index fd185996e..508f18dea 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -93,7 +93,7 @@ class ConfigManager { } override fun read(reader: JsonReader): LorenzRarity { - return LorenzRarity.valueOf(reader.nextString()) + return LorenzRarity.valueOf(reader.nextString().uppercase()) } }.nullSafe()) .registerTypeAdapter(IslandType::class.java, object : TypeAdapter() { @@ -102,7 +102,7 @@ class ConfigManager { } override fun read(reader: JsonReader): IslandType { - return IslandType.valueOf(reader.nextString()) + return IslandType.valueOf(reader.nextString().uppercase()) } }.nullSafe()) .enableComplexMapKeySerialization() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt index 8096b747c..9fa465a47 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt @@ -16,7 +16,8 @@ object GardenVisitorColorNames { visitorColours.clear() visitorItems.clear() for ((visitor, visitorData) in data.visitors) { - visitorColours[visitor] = getColor(visitorData.rarity) + val rarity = visitorData.new_rarity ?: visitorData.rarity + visitorColours[visitor] = rarity.color.getChatColor() visitorItems[visitor] = visitorData.need_items } } @@ -28,13 +29,4 @@ object GardenVisitorColorNames { val color = visitorColours[cleanName] ?: return name return color + cleanName } - - private fun getColor(rarity: String) = when (rarity) { - "uncommon" -> "§a" - "rare" -> "§9" - "legendary" -> "§6" - "special" -> "§c" - - else -> throw RuntimeException("Unknown rarity for '$rarity'") - } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java index 265e5b11e..cc8bcd51d 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.utils.jsonobjects; import at.hannibal2.skyhanni.features.garden.CropType; +import at.hannibal2.skyhanni.utils.LorenzRarity; import at.hannibal2.skyhanni.utils.LorenzVec; import com.google.gson.annotations.Expose; import org.jetbrains.annotations.Nullable; @@ -26,7 +27,10 @@ public class GardenJson { public static class GardenVisitor { @Expose - public String rarity; + public LorenzRarity rarity; + + @Expose + public LorenzRarity new_rarity; @Nullable @Expose -- cgit From d091756ac7696e2c5880a3edabcb36deeca8333f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:00:35 +0100 Subject: Fixed calendar contest detection failing. --- .../skyhanni/features/garden/GardenNextJacobContest.kt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt index 3254e685b..9a9e9c1d3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt @@ -44,7 +44,7 @@ object GardenNextJacobContest { private var inCalendar = false private val patternDay = "§aDay (?.*)".toPattern() private val patternMonth = "(?.*), Year (?.*)".toPattern() - private val patternCrop = "§e○ §7(?.*)".toPattern() + private val patternCrop = "§(e○|6☘) §7(?.*)".toPattern() private const val maxContestsPerYear = 124 private const val contestDuration = 1_000 * 60 * 20 @@ -146,17 +146,13 @@ object GardenNextJacobContest { if (!lore.any { it.contains("§6§eJacob's Farming Contest") }) continue val name = item.name ?: continue - val matcherDay = patternDay.matcher(name) - if (!matcherDay.matches()) continue + val day = patternDay.matchMatcher(name) { group("day").toInt() } ?: continue - val day = matcherDay.group("day").toInt() val startTime = SkyBlockTime(year, month, day).toMillis() val crops = mutableListOf() for (line in lore) { - val matcherCrop = patternCrop.matcher(line) - if (!matcherCrop.matches()) continue - crops.add(CropType.getByName(matcherCrop.group("crop"))) + patternCrop.matchMatcher(line) { crops.add(CropType.getByName(group("crop"))) } } contests[startTime] = FarmingContest(startTime + contestDuration, crops) @@ -513,4 +509,4 @@ object GardenNextJacobContest { event.move(3, "garden.nextJacobContestWarnPopup", "garden.nextJacobContests.warnPopup") event.move(3, "garden.nextJacobContestPos", "garden.nextJacobContests.pos") } -} \ No newline at end of file +} -- cgit From 893b98ebd6269fd8c23b882cdab02147457f4bee Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:04:05 +0100 Subject: better error handling --- .../java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index d5c279fc9..79e15eed8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ItemUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore @@ -56,8 +57,7 @@ class AnitaMedalProfit { try { readItem(item, table) } catch (e: Throwable) { - LorenzUtils.error("Error in AnitaMedalProfit while reading item '$item'") - e.printStackTrace() + ErrorManager.logError(e, "Error in AnitaMedalProfit while reading item '$item'") } } @@ -153,4 +153,4 @@ class AnitaMedalProfit { event.move(3,"garden.anitaMedalProfitEnabled", "garden.anitaShop.medalProfitEnabled") event.move(3,"garden.anitaMedalProfitPos", "garden.anitaShop.medalProfitPos") } -} \ No newline at end of file +} -- cgit From b744133f7c4b56a02c774caf02cea99cc1c580cc Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:17:24 +0100 Subject: more modern item price usage --- .../java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index 79e15eed8..1d84eae92 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -109,8 +109,7 @@ class AnitaMedalProfit { val bronze = medal.factorBronze * amount bronze * jacobTicketPrice } else { - val internalName = NEUItems.getRawInternalName(name) - NEUItems.getPrice(internalName) * amount + NEUInternalName.fromItemName(name).getPrice() * amount } } return otherItemsPrice -- cgit From 1c506e662459ce921ea1066edf75376bb10606a1 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:48:45 +0100 Subject: Fixed visitor timer. --- .../features/garden/visitor/GardenVisitorTimer.kt | 23 ++++++++------- .../skyhanni/features/garden/visitor/VisitorAPI.kt | 33 ++++++++++++++++++++++ .../features/garden/visitor/VisitorListener.kt | 30 +------------------- 3 files changed, 45 insertions(+), 41 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt index 54dfb6d62..403ff89d8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt @@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TabListData import at.hannibal2.skyhanni.utils.TimeUtils import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -22,8 +23,7 @@ import kotlin.time.Duration.Companion.seconds class GardenVisitorTimer { private val config get() = SkyHanniMod.feature.garden.visitors.timer - private val patternNextVisitor = " Next Visitor: §r§b(?
diff --git a/build.gradle.kts b/build.gradle.kts index e763b7f41..febac4b97 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.1.Beta.4" +version = "0.21.1.Beta.5" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 4a84c8823..085b6fcd8 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -331,7 +331,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.1.Beta.4", + version = "0.21.1.Beta.5", ) class SkyHanniMod { @Mod.EventHandler diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt index 0ae9115eb..dae3e129f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt @@ -101,6 +101,8 @@ object GardenCropMilestoneDisplay { val addedCounter = (counter - old).toInt() FarmingWeightDisplay.addCrop(crop, addedCounter) update() + // Farming Simulator: There is a 25% chance for Mathematical Hoes and the Cultivating Enchantment to count twice. + // 0.8 = 1 / 1.25 crop.setCounter( crop.getCounter() + if (GardenCropSpeed.finneganPerkActive()) { (addedCounter.toDouble() * 0.8).toInt() -- cgit From 6639173b3865e86981a5a02f0fe22e62ae6c8a6c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 19 Nov 2023 22:08:48 +0100 Subject: Removed message if no wrong crop milestone steps are found --- .../skyhanni/data/GardenCropMilestonesFix.kt | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt index c1f2c32f3..cad8fdddf 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt @@ -44,8 +44,8 @@ object GardenCropMilestonesFix { "Please share it on the §bSkyHanni Discord §ein the channel §b#share-data§e." ) OSUtils.copyToClipboard("```${data.joinToString("\n")}```") - } else { - LorenzUtils.chat("No wrong crop milestone steps found!") +// } else { +// LorenzUtils.chat("No wrong crop milestone steps found!") } } @@ -62,39 +62,39 @@ object GardenCropMilestonesFix { val next = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 3) ?: return val total = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 6) ?: return - debug(" ") - debug("crop: $crop") - debug("realTier: $realTier") +// debug(" ") +// debug("crop: $crop") +// debug("realTier: $realTier") val guessNextMax = GardenCropMilestones.getCropsForTier( realTier + 1, crop ) - GardenCropMilestones.getCropsForTier(realTier, crop) - debug("guessNextMax: ${guessNextMax.addSeparators()}") +// debug("guessNextMax: ${guessNextMax.addSeparators()}") val nextMax = pattern.matchMatcher(next) { group("max").formatNumber() } ?: return - debug("nextMax real: ${nextMax.addSeparators()}") +// debug("nextMax real: ${nextMax.addSeparators()}") if (nextMax != guessNextMax) { - debug("wrong, add to list") +// debug("wrong, add to list") wrongData.add("$crop:$realTier:${nextMax.addSeparators()}") } val guessTotalMax = GardenCropMilestones.getCropsForTier(46, crop) - // println("guessTotalMax: ${guessTotalMax.addSeparators()}") +// println("guessTotalMax: ${guessTotalMax.addSeparators()}") val totalMax = pattern.matchMatcher(total) { group("max").formatNumber() } ?: return - // println("totalMax real: ${totalMax.addSeparators()}") +// println("totalMax real: ${totalMax.addSeparators()}") val totalOffBy = guessTotalMax - totalMax - debug("totalOffBy: $totalOffBy") +// debug("$crop total offf by: ${totalOffBy.addSeparators()}") } - fun debug(message: String) { - if (SkyHanniMod.feature.dev.debug.enabled) { +// fun debug(message: String) { +// if (SkyHanniMod.feature.dev.debug.enabled) { // println(message) - } - } +// } +// } /** * This helps to fix wrong crop milestone data -- cgit From 4abd0d1fa483a67972aced65dc322ad5b510aee5 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 19 Nov 2023 22:30:23 +0100 Subject: Fixed farming weight no longer updating on block breaking. --- src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt | 11 ++++++++++- .../skyhanni/features/garden/farming/FarmingWeightDisplay.kt | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt index d6bd2d892..4c6058b26 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.data import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.events.OwnInventoryItemUpdateEvent import at.hannibal2.skyhanni.events.PacketEvent import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent import at.hannibal2.skyhanni.features.bazaar.BazaarApi @@ -30,9 +31,17 @@ class OwnInventoryData { fun onChatPacket(event: PacketEvent.ReceiveEvent) { if (!LorenzUtils.inSkyBlock) return - if (event.packet.let { it is S2FPacketSetSlot || it is S0DPacketCollectItem }) { + val packet = event.packet + if (packet is S2FPacketSetSlot || packet is S0DPacketCollectItem) { dirty = true } + if (packet is S2FPacketSetSlot) { + val windowId = packet.func_149175_c() + if (windowId == 0) { + val item = packet.func_149174_e() ?: return + OwnInventoryItemUpdateEvent(item).postAndCatch() + } + } } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index f32da7867..f776a9c86 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -387,8 +387,8 @@ class FarmingWeightDisplay { private fun chatOffScreenChange(direction: String, oldPosition: Int) { farmingChatMessage( "§7Since your last visit to the §aGarden§7, " + - "you have $direction §7on the §dFarming Leaderboard§7. " + - "§7(§e#${oldPosition.addSeparators()} §7-> §e#${leaderboardPosition.addSeparators()}§7)" + "you have $direction §7on the §dFarming Leaderboard§7. " + + "§7(§e#${oldPosition.addSeparators()} §7-> §e#${leaderboardPosition.addSeparators()}§7)" ) } -- cgit From 5eb36e720beb9074aa0f6d2509d993bedc1ce3bb Mon Sep 17 00:00:00 2001 From: alexia Date: Sun, 19 Nov 2023 23:06:34 +0100 Subject: Use crop fortune from tab in Farming Fortune HUD (#719) Use crop fortune from tab in Farming Fortune HUD #719 --- .../features/garden/FarmingFortuneDisplay.kt | 94 ++++++++++------------ 1 file changed, 42 insertions(+), 52 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 8bf474ddb..506331184 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -36,7 +36,8 @@ import kotlin.math.floor import kotlin.math.log10 class FarmingFortuneDisplay { - private val tabFortunePattern = " Farming Fortune: §r§6☘(\\d+)".toRegex() + private val tabFortuneUniversalPattern = " Farming Fortune: §r§6☘(?\\d+)".toRegex() + private val tabFortuneCropPattern = " (?Wheat|Carrot|Potato|Pumpkin|Sugar Cane|Melon|Cactus|Cocoa Beans|Mushroom|Nether Wart) Fortune: §r§6☘(?\\d+)".toRegex() private var display = emptyList>() private var accessoryProgressDisplay = "" @@ -52,30 +53,18 @@ class FarmingFortuneDisplay { @SubscribeEvent fun onTabListUpdate(event: TabListUpdateEvent) { if (!GardenAPI.inGarden()) return - tabFortune = event.tabList.firstNotNullOfOrNull { - tabFortunePattern.matchEntire(it)?.groups?.get(1)?.value?.toDoubleOrNull() - } ?: tabFortune - } - - @SubscribeEvent(priority = EventPriority.LOW) - fun onInventoryUpdate(event: OwnInventoryItemUpdateEvent) { - if (!GardenAPI.inGarden()) return - if (event.itemStack.getCropType() == null) return - updateToolFortune(event.itemStack) - } - - @SubscribeEvent - fun onBlockBreak(event: CropClickEvent) { - val cropBroken = event.crop - if (cropBroken != currentCrop) { - updateToolFortune(event.itemInHand) + event.tabList.firstNotNullOfOrNull { + tabFortuneUniversalPattern.matchEntire(it)?.groups?.get("fortune")?.value?.toDoubleOrNull()?.let { tabFortuneUniversal = it } + tabFortuneCropPattern.matchEntire(it)?.groups?.let { + it.get("crop")?.value?.let { currentCrop = CropType.getByNameOrNull(it) } + it.get("fortune")?.value?.toDoubleOrNull()?.let { tabFortuneCrop = it } + } } } @SubscribeEvent fun onGardenToolChange(event: GardenToolChangeEvent) { lastToolSwitch = System.currentTimeMillis() - updateToolFortune(event.toolItem) } @SubscribeEvent @@ -98,22 +87,46 @@ class FarmingFortuneDisplay { @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!event.isMod(5)) return - val displayCrop = currentCrop ?: return + val currentCrop = currentCrop ?: return + + val displayCrop = GardenAPI.cropInHand ?: currentCrop + var wrongTabCrop = false + var farmingFortune = -1.0 val updatedDisplay = mutableListOf>() updatedDisplay.add(mutableListOf().also { it.addCropIcon(displayCrop) - val recentlySwitchedTool = System.currentTimeMillis() < lastToolSwitch + 1000 + + var recentlySwitchedTool = System.currentTimeMillis() < lastToolSwitch + 1500 + wrongTabCrop = GardenAPI.cropInHand != null && GardenAPI.cropInHand != currentCrop + + if (wrongTabCrop) { + farmingFortune = displayCrop.getLatestTrueFarmingFortune()?.let { + if (config.dropMultiplier) it else it - 100.0 + } ?: -1.0 + recentlySwitchedTool = false + } else { + farmingFortune = getCurrentFarmingFortune() + } + it.add( - "§6Farming Fortune§7: §e" + if (!recentlySwitchedTool) { - LorenzUtils.formatDouble(getCurrentFarmingFortune(), 0) + "§6Farming Fortune§7: §e" + if (!recentlySwitchedTool && farmingFortune != -1.0) { + LorenzUtils.formatDouble(farmingFortune, 0) } else "?" ) - if (GardenAPI.toolInHand != null) { - latestFF?.put(displayCrop, getCurrentFarmingFortune(true)) + + if (GardenAPI.cropInHand == currentCrop) { + latestFF?.put(currentCrop, getCurrentFarmingFortune(true)) } }) + if (wrongTabCrop) { + var text = "§cBreak a §e${GardenAPI.cropInHand?.cropName}§c to see" + if (farmingFortune != -1.0) text += " latest" + text += " fortune!" + + updatedDisplay.addAsSingletonList(text) + } if (upgradeFortune == null) { updatedDisplay.addAsSingletonList("§cOpen §e/cropupgrades§c for more exact data!") } @@ -130,24 +143,16 @@ class FarmingFortuneDisplay { display = updatedDisplay } - private fun updateToolFortune(tool: ItemStack?) { - val cropMatchesTool = currentCrop == tool?.getCropType() - val toolCounterFortune = if (cropMatchesTool) { - getToolFortune(tool) + getCounterFortune(tool) + getCollectionFortune(tool) - } else 0.0 - toolFortune = - toolCounterFortune + getTurboCropFortune(tool, currentCrop) + getDedicationFortune(tool, currentCrop) - } - private fun isEnabled(): Boolean = GardenAPI.inGarden() && config.display companion object { private val config get() = SkyHanniMod.feature.garden.farmingFortunes private val latestFF: MutableMap? get() = GardenAPI.storage?.latestTrueFarmingFortune - private val currentCrop get() = GardenAPI.getCurrentlyFarmedCrop() + private var currentCrop: CropType? = null - private var tabFortune: Double = 0.0 + private var tabFortuneUniversal: Double = 0.0 + private var tabFortuneCrop: Double = 0.0 private var toolFortune: Double = 0.0 private val baseFortune: Double get() = if (config.dropMultiplier) 100.0 else 0.0 private val upgradeFortune: Double? get() = currentCrop?.getUpgradeLevel()?.let { it * 5.0 } @@ -263,23 +268,8 @@ class FarmingFortuneDisplay { } fun getCurrentFarmingFortune(alwaysBaseFortune: Boolean = false): Double { - val upgradeFortune = upgradeFortune ?: 0.0 - val accessoryFortune = accessoryFortune ?: 0.0 - val baseFortune = if (alwaysBaseFortune) 100.0 else baseFortune - var otherFortune = 0.0 - - if (currentCrop == CropType.CARROT) { - GardenAPI.storage?.fortune?.let { - if (it.carrotFortune) otherFortune = 12.0 - } - } - if (currentCrop == CropType.PUMPKIN) { - GardenAPI.storage?.fortune?.let { - if (it.pumpkinFortune) otherFortune = 12.0 - } - } - return baseFortune + upgradeFortune + tabFortune + toolFortune + accessoryFortune + otherFortune + return baseFortune + tabFortuneUniversal + tabFortuneCrop } fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this) -- cgit From 48b57914c726993bbe76886e44f580c89f6e8d3b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 19 Nov 2023 23:09:47 +0100 Subject: code cleanup --- .../features/garden/FarmingFortuneDisplay.kt | 39 +++++++++++----------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 506331184..6f468bd83 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -6,16 +6,13 @@ import at.hannibal2.skyhanni.data.CropAccessoryData import at.hannibal2.skyhanni.data.GardenCropMilestones import at.hannibal2.skyhanni.data.GardenCropMilestones.getCounter import at.hannibal2.skyhanni.data.GardenCropUpgrades.Companion.getUpgradeLevel -import at.hannibal2.skyhanni.events.CropClickEvent import at.hannibal2.skyhanni.events.GardenToolChangeEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzTickEvent -import at.hannibal2.skyhanni.events.OwnInventoryItemUpdateEvent import at.hannibal2.skyhanni.events.PreProfileSwitchEvent import at.hannibal2.skyhanni.events.TabListUpdateEvent import at.hannibal2.skyhanni.features.garden.CropType.Companion.getTurboCrop import at.hannibal2.skyhanni.features.garden.GardenAPI.addCropIcon -import at.hannibal2.skyhanni.features.garden.GardenAPI.getCropType import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils @@ -24,25 +21,26 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.nextAfter import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFarmingForDummiesCount import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHoeCounter import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraft.item.ItemStack -import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.math.floor import kotlin.math.log10 +import kotlin.time.Duration.Companion.seconds class FarmingFortuneDisplay { - private val tabFortuneUniversalPattern = " Farming Fortune: §r§6☘(?\\d+)".toRegex() - private val tabFortuneCropPattern = " (?Wheat|Carrot|Potato|Pumpkin|Sugar Cane|Melon|Cactus|Cocoa Beans|Mushroom|Nether Wart) Fortune: §r§6☘(?\\d+)".toRegex() + private val tabFortuneUniversalPattern = " Farming Fortune: §r§6☘(?\\d+)".toPattern() + private val tabFortuneCropPattern = " (?Wheat|Carrot|Potato|Pumpkin|Sugar Cane|Melon|Cactus|Cocoa Beans|Mushroom|Nether Wart) Fortune: §r§6☘(?\\d+)".toPattern() private var display = emptyList>() private var accessoryProgressDisplay = "" - private var lastToolSwitch: Long = 0 + private var lastToolSwitch = SimpleTimeMark.farPast() @SubscribeEvent fun onPreProfileSwitch(event: PreProfileSwitchEvent) { @@ -54,17 +52,19 @@ class FarmingFortuneDisplay { fun onTabListUpdate(event: TabListUpdateEvent) { if (!GardenAPI.inGarden()) return event.tabList.firstNotNullOfOrNull { - tabFortuneUniversalPattern.matchEntire(it)?.groups?.get("fortune")?.value?.toDoubleOrNull()?.let { tabFortuneUniversal = it } - tabFortuneCropPattern.matchEntire(it)?.groups?.let { - it.get("crop")?.value?.let { currentCrop = CropType.getByNameOrNull(it) } - it.get("fortune")?.value?.toDoubleOrNull()?.let { tabFortuneCrop = it } + tabFortuneUniversalPattern.matchMatcher(it) { + tabFortuneUniversal = group("fortune").toDouble() + } + tabFortuneCropPattern.matchMatcher(it) { + currentCrop = CropType.getByName(group("crop")) + tabFortuneCrop = group("fortune").toDouble() } } } @SubscribeEvent fun onGardenToolChange(event: GardenToolChangeEvent) { - lastToolSwitch = System.currentTimeMillis() + lastToolSwitch = SimpleTimeMark.now() } @SubscribeEvent @@ -90,14 +90,14 @@ class FarmingFortuneDisplay { val currentCrop = currentCrop ?: return val displayCrop = GardenAPI.cropInHand ?: currentCrop - var wrongTabCrop = false - var farmingFortune = -1.0 + var wrongTabCrop: Boolean + var farmingFortune: Double val updatedDisplay = mutableListOf>() - updatedDisplay.add(mutableListOf().also { - it.addCropIcon(displayCrop) + updatedDisplay.add(mutableListOf().also { list -> + list.addCropIcon(displayCrop) - var recentlySwitchedTool = System.currentTimeMillis() < lastToolSwitch + 1500 + var recentlySwitchedTool = lastToolSwitch.passedSince() < 1.5.seconds wrongTabCrop = GardenAPI.cropInHand != null && GardenAPI.cropInHand != currentCrop if (wrongTabCrop) { @@ -109,7 +109,7 @@ class FarmingFortuneDisplay { farmingFortune = getCurrentFarmingFortune() } - it.add( + list.add( "§6Farming Fortune§7: §e" + if (!recentlySwitchedTool && farmingFortune != -1.0) { LorenzUtils.formatDouble(farmingFortune, 0) } else "?" @@ -121,7 +121,7 @@ class FarmingFortuneDisplay { }) if (wrongTabCrop) { - var text = "§cBreak a §e${GardenAPI.cropInHand?.cropName}§c to see" + var text = "§cBreak §e${GardenAPI.cropInHand?.cropName}§c to see" if (farmingFortune != -1.0) text += " latest" text += " fortune!" @@ -153,7 +153,6 @@ class FarmingFortuneDisplay { private var tabFortuneUniversal: Double = 0.0 private var tabFortuneCrop: Double = 0.0 - private var toolFortune: Double = 0.0 private val baseFortune: Double get() = if (config.dropMultiplier) 100.0 else 0.0 private val upgradeFortune: Double? get() = currentCrop?.getUpgradeLevel()?.let { it * 5.0 } private val accessoryFortune: Double? -- cgit From ca6533796afc38290199a693617dc43b16cd32bb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 19 Nov 2023 23:23:46 +0100 Subject: better saving latest ff tool, and showing old saved ff while switching --- .../at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 6f468bd83..ac48b1ec2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -19,6 +19,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzUtils.nextAfter import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.SimpleTimeMark @@ -112,11 +113,13 @@ class FarmingFortuneDisplay { list.add( "§6Farming Fortune§7: §e" + if (!recentlySwitchedTool && farmingFortune != -1.0) { LorenzUtils.formatDouble(farmingFortune, 0) - } else "?" + } else "§7" + (displayCrop.getLatestTrueFarmingFortune()?.addSeparators() ?: "?") ) if (GardenAPI.cropInHand == currentCrop) { - latestFF?.put(currentCrop, getCurrentFarmingFortune(true)) + if (!recentlySwitchedTool) { + latestFF?.put(currentCrop, getCurrentFarmingFortune(true)) + } } }) -- cgit From 5274873601f23daf743e215616405f04839a8474 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 19 Nov 2023 23:39:06 +0100 Subject: Added cooldown to prevent spam clicking on farming weight buttons to open many web pages. --- .../features/garden/farming/FarmingWeightDisplay.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index f776a9c86..a13cc6031 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.TimeUtils import at.hannibal2.skyhanni.utils.renderables.Renderable @@ -24,6 +25,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds class FarmingWeightDisplay { @@ -136,6 +138,8 @@ class FarmingWeightDisplay { ) } + private var lastOpenWebsite = SimpleTimeMark.farPast() + private fun update() { if (!GardenAPI.inGarden()) return if (apiError) { @@ -225,7 +229,10 @@ class FarmingWeightDisplay { val parsed = value.toIntOrNull() ?: 0 if (parsed < 1 || parsed > goal) { LorenzUtils.error("Invalid Farming Weight Overtake Goal!") - LorenzUtils.chat("§eEdit the Overtake Goal config value with a valid number [1-10000] to use this feature!", false) + LorenzUtils.chat( + "§eEdit the Overtake Goal config value with a valid number [1-10000] to use this feature!", + false + ) config.ETAGoalRank = goal.toString() } else { goal = parsed @@ -503,10 +510,13 @@ class FarmingWeightDisplay { fun lookUpCommand(it: Array) { val name = if (it.size == 1) it[0] else LorenzUtils.getPlayerName() - openWebsite(name) + openWebsite(name, ignoreCooldown = true) } - private fun openWebsite(name: String?) { + private fun openWebsite(name: String, ignoreCooldown: Boolean = false) { + if (!ignoreCooldown && lastOpenWebsite.passedSince() < 5.seconds) return + lastOpenWebsite = SimpleTimeMark.now() + OSUtils.openBrowser("https://elitebot.dev/@$name/") LorenzUtils.chat("Opening Farming Profile of player §b$name") } -- cgit From 990d54fb54adbf66affcbaa4c90667ecc834f386 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 00:11:21 +0100 Subject: Remind every 30 minutes to set a hotkey for /sh gui. --- .../at/hannibal2/skyhanni/config/commands/Commands.kt | 2 +- .../skyhanni/config/features/gui/GUIConfig.java | 2 +- .../java/at/hannibal2/skyhanni/data/GuiEditManager.kt | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 096078cf5..641dc912d 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -67,7 +67,7 @@ object Commands { private val openMainMenu: (Array) -> Unit = { if (it.isNotEmpty()) { if (it[0].lowercase() == "gui") { - GuiEditManager.openGuiPositionEditor() + GuiEditManager.openGuiPositionEditor(hotkeyReminder = true) } else { ConfigGuiManager.openConfigGui(it.joinToString(" ")) } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java index 9e1816107..4eeadf221 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java @@ -16,7 +16,7 @@ public class GUIConfig { @ConfigOption(name = "Edit GUI Locations", desc = "Change the position of SkyHanni's overlays.") @ConfigEditorButton(buttonText = "Edit") - public Runnable positions = GuiEditManager::openGuiPositionEditor; + public Runnable positions = () -> GuiEditManager.openGuiPositionEditor(true); @Expose @ConfigOption(name = "Open Hotkey", desc = "Press this key to open the GUI Editor.") diff --git a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt index 2f7617924..2486c7eee 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt @@ -9,6 +9,7 @@ import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isRancherSign import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.SimpleTimeMark import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiChest @@ -18,6 +19,7 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.UUID +import kotlin.time.Duration.Companion.minutes class GuiEditManager { @SubscribeEvent @@ -33,7 +35,7 @@ class GuiEditManager { if (NEUItems.neuHasFocus()) return - openGuiPositionEditor() + openGuiPositionEditor(hotkeyReminder = false) } @SubscribeEvent(priority = EventPriority.LOWEST) @@ -60,9 +62,19 @@ class GuiEditManager { } } + private var lastHotkeyReminded = SimpleTimeMark.farPast() + @JvmStatic - fun openGuiPositionEditor() { + fun openGuiPositionEditor(hotkeyReminder: Boolean) { SkyHanniMod.screenToOpen = GuiPositionEditor(latestPositions.values.toList(), 2) + if (hotkeyReminder && lastHotkeyReminded.passedSince() > 30.minutes) { + lastHotkeyReminded = SimpleTimeMark.now() + LorenzUtils.chat( + "§eTo edit hidden GUI elements:\n" + + " §7- §e1. Set a key in /sh edit.\n" + + " §7- §e2. Click that key while the GUI element is visible." + ) + } } @JvmStatic -- cgit From 86e9f31988715756c0fce31963a162b90ed0e2b6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 00:14:43 +0100 Subject: Removed cooldown for clicking different names. --- .../skyhanni/features/garden/farming/FarmingWeightDisplay.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index a13cc6031..1070319c9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -513,9 +513,12 @@ class FarmingWeightDisplay { openWebsite(name, ignoreCooldown = true) } + var lastName = "" + private fun openWebsite(name: String, ignoreCooldown: Boolean = false) { - if (!ignoreCooldown && lastOpenWebsite.passedSince() < 5.seconds) return + if (!ignoreCooldown && lastOpenWebsite.passedSince() < 5.seconds && name == lastName) return lastOpenWebsite = SimpleTimeMark.now() + lastName = name OSUtils.openBrowser("https://elitebot.dev/@$name/") LorenzUtils.chat("Opening Farming Profile of player §b$name") -- cgit From 8964cf9bd7647fd9216ce0c3e5af229dabfa5fb5 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 00:56:40 +0100 Subject: Fixed ender chest not reopening correctly after opening gui editor. --- .../at/hannibal2/skyhanni/data/GuiEditManager.kt | 11 +++++++++-- .../at/hannibal2/skyhanni/utils/InventoryUtils.kt | 21 +++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt index 2486c7eee..7477d74bb 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt @@ -19,9 +19,13 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.UUID +import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.minutes class GuiEditManager { + + var lastHotkeyPressed = SimpleTimeMark.farPast() + @SubscribeEvent fun onKeyClick(event: LorenzKeyPressEvent) { if (!LorenzUtils.inSkyBlock) return @@ -33,8 +37,11 @@ class GuiEditManager { if (it is GuiEditSign && !it.isRancherSign()) return } + if (lastHotkeyPressed.passedSince() < 500.milliseconds) return if (NEUItems.neuHasFocus()) return + lastHotkeyPressed = SimpleTimeMark.now() + Minecraft.getMinecraft().thePlayer.closeScreen() openGuiPositionEditor(hotkeyReminder = false) } @@ -71,8 +78,8 @@ class GuiEditManager { lastHotkeyReminded = SimpleTimeMark.now() LorenzUtils.chat( "§eTo edit hidden GUI elements:\n" + - " §7- §e1. Set a key in /sh edit.\n" + - " §7- §e2. Click that key while the GUI element is visible." + " §7- §e1. Set a key in /sh edit.\n" + + " §7- §e2. Click that key while the GUI element is visible." ) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt index eb06c23ee..2a6b002af 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt @@ -1,14 +1,12 @@ package at.hannibal2.skyhanni.utils -import at.hannibal2.skyhanni.config.ConfigManager -import at.hannibal2.skyhanni.data.OtherMod import at.hannibal2.skyhanni.test.command.ErrorManager +import io.github.moulberry.notenoughupdates.NotEnoughUpdates import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiChest import net.minecraft.inventory.ContainerChest import net.minecraft.inventory.Slot import net.minecraft.item.ItemStack -import java.io.File import kotlin.time.Duration.Companion.seconds object InventoryUtils { @@ -56,15 +54,14 @@ object InventoryUtils { val isNeuStorageEnabled = RecalculatingValue(10.seconds) { try { - val configPath = OtherMod.NEU.configPath - if (File(configPath).exists()) { - val json = ConfigManager.gson.fromJson( - APIUtil.readFile(File(configPath)), - com.google.gson.JsonObject::class.java - ) - json["storageGUI"].asJsonObject["enableStorageGUI3"].asBoolean - } else false - } catch (e: Exception) { + val config = NotEnoughUpdates.INSTANCE.config + + val storageField = config.javaClass.getDeclaredField("storageGUI") + val storage = storageField.get(config) + + val booleanField = storage.javaClass.getDeclaredField("enableStorageGUI3") + booleanField.get(storage) as Boolean + } catch (e: Throwable) { ErrorManager.logError(e, "Could not read NEU config to determine if the neu storage is emabled.") false } -- cgit From 3f18945698cb4a67a07bc053046ee3d7f00b7b5e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 01:12:46 +0100 Subject: formatting changes --- .../config/features/garden/EliteFarmingWeightConfig.java | 3 ++- .../features/garden/farming/FarmingWeightDisplay.kt | 14 +++++++------- src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt | 3 ++- 3 files changed, 11 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/garden/EliteFarmingWeightConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/garden/EliteFarmingWeightConfig.java index c192ac763..caf56c195 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/garden/EliteFarmingWeightConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/garden/EliteFarmingWeightConfig.java @@ -32,8 +32,9 @@ public class EliteFarmingWeightConfig { public boolean overtakeETA = false; @Expose - @ConfigOption(name = "Offscreen Drop Message", desc = "Show a chat message when joining Garden how many spots you have dropped since last Garden join.") + @ConfigOption(name = "Show LB Change", desc = "Show the change of your position in the farming weight leaderboard while you were offline.") @ConfigEditorBoolean + // TODO migrate public boolean offScreenDropMessage = true; @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index 1070319c9..233aa46ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -385,17 +385,17 @@ class FarmingWeightDisplay { if (diff == 0) return if (diff > 0) { - chatOffScreenChange("§cdropped ${StringUtils.optionalPlural(diff, "place", "places")}", oldPosition) + showLbChange("§cdropped ${StringUtils.optionalPlural(diff, "place", "places")}", oldPosition) } else { - chatOffScreenChange("§arisen ${StringUtils.optionalPlural(-diff, "place", "places")}", oldPosition) + showLbChange("§arisen ${StringUtils.optionalPlural(-diff, "place", "places")}", oldPosition) } } - private fun chatOffScreenChange(direction: String, oldPosition: Int) { + private fun showLbChange(direction: String, oldPosition: Int) { farmingChatMessage( "§7Since your last visit to the §aGarden§7, " + - "you have $direction §7on the §dFarming Leaderboard§7. " + - "§7(§e#${oldPosition.addSeparators()} §7-> §e#${leaderboardPosition.addSeparators()}§7)" + "you have $direction §7on the §dFarming Leaderboard§7. " + + "§7(§e#${oldPosition.addSeparators()} §7-> §e#${leaderboardPosition.addSeparators()}§7)" ) } @@ -472,8 +472,8 @@ class FarmingWeightDisplay { apiError = true LorenzUtils.error( "Loading the farming weight data from elitebot.dev failed!\n" - + "§eYou can re-enter the garden to try to fix the problem.\n" + - "§cIf this message repeats, please report it on Discord!", + + "§eYou can re-enter the garden to try to fix the problem.\n" + + "§cIf this message repeats, please report it on Discord!", ) } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 05694c0a9..2066b809b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.mixins.transformers.AccessorChatComponentText import at.hannibal2.skyhanni.utils.GuiRenderUtils.darkenColor +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiUtilRenderComponents import net.minecraft.util.ChatComponentText @@ -148,7 +149,7 @@ object StringUtils { } fun optionalPlural(number: Int, singular: String, plural: String) = - "$number " + if (number == 1) singular else plural + "${number.addSeparators()} " + if (number == 1) singular else plural fun progressBar(percentage: Double, steps: Int = 24): Any { //'§5§o§2§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §f§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §r §e348,144.3§6/§e936k' -- cgit From 35b6ecbdcb5e8e7ed0ef15abec7d86da6c82d728 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 01:22:09 +0100 Subject: Fixed clickable farming weight gui that opens #1000 in lb website. --- .../features/garden/farming/FarmingWeightDisplay.kt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index 233aa46ea..13125c349 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -254,8 +254,9 @@ class FarmingWeightDisplay { listOf("§eClick here to load new data right now!"), onClick = recalculate ) + val showRankGoal = leaderboardPosition == -1 || leaderboardPosition > rankGoal var nextName = - if (leaderboardPosition == -1 || leaderboardPosition > rankGoal) "#$rankGoal" else nextPlayer.name + if (showRankGoal) "#$rankGoal" else nextPlayer.name val totalWeight = (localWeight + weight) var weightUntilOvertake = nextPlayer.weight - totalWeight @@ -298,11 +299,16 @@ class FarmingWeightDisplay { } else "" val weightFormat = LorenzUtils.formatDouble(weightUntilOvertake, 2) - return Renderable.clickAndHover( - "§e$weightFormat$timeFormat §7behind §b$nextName", - listOf("§eClick to open the Farming Profile of §b$nextName.") - ) { - openWebsite(nextName) + val text = "§e$weightFormat$timeFormat §7behind §b$nextName" + return if (showRankGoal) { + Renderable.string(text) + } else { + Renderable.clickAndHover( + text, + listOf("§eClick to open the Farming Profile of §b$nextName.") + ) { + openWebsite(nextName) + } } } -- cgit From 0b897aeae566b19e9bf87776156d761965f7d1ec Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 01:37:48 +0100 Subject: Fixed /ff upgrade suggests to update bustling reforge even when no farming armor is found. --- .../skyhanni/features/garden/fortuneguide/FFGuideGUI.kt | 14 +++++++++++--- .../features/garden/fortuneguide/FortuneUpgrades.kt | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt index 932fbbacd..d93dfd36a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFGuideGUI.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.CropPage import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.OverviewPage import at.hannibal2.skyhanni.features.garden.fortuneguide.pages.UpgradePage import at.hannibal2.skyhanni.utils.GuiRenderUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.SoundUtils import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiScreen @@ -56,8 +57,14 @@ open class FFGuideGUI : GuiScreen() { return fallbackItem } - fun getFallbackItem(item: FarmingItems): ItemStack = - ItemStack(Blocks.barrier).setStackDisplayName("§cNo saved ${item.name.lowercase().replace("_", " ")}") + private val fallbackItems = mutableMapOf() + + fun getFallbackItem(item: FarmingItems) = fallbackItems.getOrPut(item) { + val name = "§cNo saved ${item.name.lowercase().replace("_", " ")}" + ItemStack(Blocks.barrier).setStackDisplayName(name) + } + + fun isFallbackItem(item: ItemStack) = item.name!!.startsWith("§cNo saved ") } init { @@ -294,7 +301,8 @@ open class FFGuideGUI : GuiScreen() { x = guiLeft - 28 y = guiTop + 15 if (isMouseIn(x, y, 28, 25) && - selectedPage != FortuneGuidePage.CROP && selectedPage != FortuneGuidePage.OVERVIEW) { + selectedPage != FortuneGuidePage.CROP && selectedPage != FortuneGuidePage.OVERVIEW + ) { SoundUtils.playClickSound() selectedPage = if (currentCrop == null) { FortuneGuidePage.OVERVIEW diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt index 9b2f6441e..c7ff7275a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FortuneUpgrades.kt @@ -126,6 +126,8 @@ object FortuneUpgrades { val item = piece.getItem() //todo skip if it doesnt exist -> tell them to buy it later + if (FFGuideGUI.isFallbackItem(item)) return + recombobulateItem(item, genericUpgrades) when (item.getReforgeName()) { "mossy" -> {} -- cgit From 40c90d9041a65753a1e6db8a3080b5f25201977c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:41:56 +0100 Subject: better error message --- .../hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt index 6cbb77fbf..1bd9290e2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt @@ -142,7 +142,10 @@ class GardenVisitorTimer { } if (lastMillis == Duration.INFINITE) { - LorenzUtils.error("Found Visitor Timer bug, reset value (lastMillis was infinite).") + ErrorManager.logErrorStateWithData( + "Found Visitor Timer bug, reset value", "lastMillis was infinite", + "lastMillis" to lastMillis + ) lastMillis = 0.seconds } -- cgit From 5121bb988d881eba2ef145fd19c4fbc4a39d07b3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:50:31 +0100 Subject: better screen close logic --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 1 + src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 085b6fcd8..2d0b2e24a 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -676,6 +676,7 @@ class SkyHanniMod { if (screenToOpen != null) { screenTicks++ if (screenTicks == 5) { + Minecraft.getMinecraft().thePlayer.closeScreen() Minecraft.getMinecraft().displayGuiScreen(screenToOpen) screenTicks = 0 screenToOpen = null diff --git a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt index 7477d74bb..3af97e0f9 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt @@ -41,7 +41,6 @@ class GuiEditManager { if (NEUItems.neuHasFocus()) return lastHotkeyPressed = SimpleTimeMark.now() - Minecraft.getMinecraft().thePlayer.closeScreen() openGuiPositionEditor(hotkeyReminder = false) } -- cgit From 94ab85f38a90e1cff5eb8b0e1b986d8c748cb5b3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:02:34 +0100 Subject: 0.21.1 Beta 6 --- CHANGELOG.md | 11 +++++++++++ build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bb14e0bb..55ce3f340 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Changes + #### Garden Changes + Added mythic/Maeve visitor support. - walker & hannibal2 @@ -21,11 +22,16 @@ + Added option to change the item scale of SkyMart Coins per Copper list. - hannibal2 + Added support for Sunder 6 in /ff upgrades. - hannibal2 + Added support for mythic in Visitor Drop Statistics. - hannibal2 ++ Use the crop fortune from tab in Farming Fortune HUD. - alexia ++ Shows the last saved ff value in gray while switching tools instead of the question mark. - hannibal2 ++ Removed chat message that your crop milestone data is correct. - hannibal2 #### Other Changes + Added guess seconds to the Visitor Timer when the tab list doesn't show seconds. - hannibal2 + Add option to hide the chat message when toggling /shmouselock. - hannibal2 ++ Reminds to use the GUI Position Editor hotkey. - hannibal2 + + Reminds every 30 minutes after using /sh gui or clicking the GUI edit button. ### Fixes @@ -42,6 +48,10 @@ + Fixed /ff not detecting collection analyst fortune. - hannibal2 + Fixed Mushroom Cow Perk display not working. - hannibal2 + Fixed visitor timer error if the visitors aren't unlocked yet. - hannibal2 ++ Fixed farming weight no longer updating on block breaking. - hannibal2 ++ Added cooldown to prevent spam clicking on farming weight buttons to open many web pages. - hannibal2 ++ Fixed clickable farming weight GUI no longer opens #1000 in lb website. - hannibal2 ++ Fixed /ff upgrade suggests updating bustling reforge even when no farming armor is found. - hannibal2 #### Other Fixes @@ -53,6 +63,7 @@ + Fixed dice roll profit counting as Mob Kill Coins in Slayer Tracker. - hannibal2 + Fixed Sack Display sometimes not formatting a million correctly. - Hize + Fixed Estimated Item Value getting shown in stats breakdown menu. - hannibal2 ++ Fixed a bug with the ender chest and SkyHanni GUI editor. - hannibal2 ### Technical Details diff --git a/build.gradle.kts b/build.gradle.kts index febac4b97..b79a287b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.1.Beta.5" +version = "0.21.1.Beta.6" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 2d0b2e24a..f2d250226 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -331,7 +331,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.1.Beta.5", + version = "0.21.1.Beta.6", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 4265f7c57aa4f31eb2b95c9c21a46c7bd0f02dc1 Mon Sep 17 00:00:00 2001 From: alexia Date: Tue, 21 Nov 2023 16:57:40 +0100 Subject: Add Sunder 6 in /ff breakdown (#721) Fixed maxed sunder fortune in /ff stats breakdown. #721 --- .../at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt index 255d94b24..051e6ae3a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/FFStats.kt @@ -111,7 +111,7 @@ object FFStats { } in dicerCrops -> { - cropPage[FortuneStats.SUNDER] = Pair(FarmingFortuneDisplay.getSunderFortune(tool), 62.5) + cropPage[FortuneStats.SUNDER] = Pair(FarmingFortuneDisplay.getSunderFortune(tool), 75.0) if (toolHasBountiful?.get(crop) == true) { cropPage[FortuneStats.REFORGE] = Pair(FarmingFortuneDisplay.reforgeFortune, 10.0) } else { @@ -131,7 +131,7 @@ object FFStats { CropType.COCOA_BEANS -> { cropPage[FortuneStats.BASE_TOOL] = Pair(FarmingFortuneDisplay.getToolFortune(tool), 20.0) - cropPage[FortuneStats.SUNDER] = Pair(FarmingFortuneDisplay.getSunderFortune(tool), 62.5) + cropPage[FortuneStats.SUNDER] = Pair(FarmingFortuneDisplay.getSunderFortune(tool), 75.0) if (toolHasBountiful?.get(crop) == true) { cropPage[FortuneStats.REFORGE] = Pair(FarmingFortuneDisplay.reforgeFortune, 7.0) } else { -- cgit From c9dcfa040934df376e1bab2c893b466f2323829c Mon Sep 17 00:00:00 2001 From: jani270 <69345714+jani270@users.noreply.github.com> Date: Tue, 21 Nov 2023 17:04:08 +0100 Subject: Added Bookworm Book to the Estimated Item Value feature (#722) Added Bookworm Book to the Estimated Item Value feature. #722 --- .../features/misc/items/EstimatedItemValueCalculator.kt | 11 +++++++++++ .../at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt | 2 ++ 2 files changed, 13 insertions(+) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index 93edf2416..f3e27957d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -22,6 +22,7 @@ import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAbilityScrolls import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getArmorDye import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getAttributes +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getBookwormBookCount import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDrillUpgrades import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDungeonStarCount import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments @@ -84,6 +85,7 @@ object EstimatedItemValueCalculator { totalPrice += addTransmissionTuners(stack, list) totalPrice += addManaDisintegrators(stack, list) totalPrice += addPolarvoidBook(stack, list) + totalPrice += addBookwormBook(stack, list) // cosmetic totalPrice += addHelmetSkin(stack, list) @@ -339,6 +341,15 @@ object EstimatedItemValueCalculator { return price } + private fun addBookwormBook(stack: ItemStack, list: MutableList): Double { + val count = stack.getBookwormBookCount() ?: return 0.0 + + val tfHardcodedItemAgain = "BOOKWORM_BOOK".asInternalName() + val price = tfHardcodedItemAgain.getPrice() * count + list.add("§7Bookworm's Favorite Book: §e$count§7/§e5 §7(§6" + NumberUtil.format(price) + "§7)") + return price + } + private fun addSilex(stack: ItemStack, list: MutableList): Double { val tier = stack.getSilexCount() ?: return 0.0 diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt index 8d600f70e..9f65a71f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt @@ -26,6 +26,8 @@ object SkyBlockItemModifierUtils { fun ItemStack.getPolarvoidBookCount() = getAttributeInt("polarvoid") + fun ItemStack.getBookwormBookCount() = getAttributeInt("bookworm_books") + fun ItemStack.getCultivatingCounter() = getAttributeLong("farmed_cultivating") fun ItemStack.getHoeCounter() = getAttributeLong("mined_crops") -- cgit From 46399eb4ef9212935853bdd1c0af191cb6b76503 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:48:55 +0100 Subject: Removed message when crop milestones look different in the menu than stored SkyHanni data. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 + .../hannibal2/skyhanni/config/commands/Commands.kt | 4 +- .../skyhanni/data/GardenCropMilestones.kt | 2 +- .../data/GardenCropMilestonesCommunityFix.kt | 179 +++++++++++++++++++++ .../skyhanni/data/GardenCropMilestonesFix.kt | 159 ------------------ .../skyhanni/utils/jsonobjects/GardenJson.java | 3 + 6 files changed, 187 insertions(+), 162 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index f2d250226..a7c3584b6 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -16,6 +16,7 @@ import at.hannibal2.skyhanni.data.EntityMovementData import at.hannibal2.skyhanni.data.FriendAPI import at.hannibal2.skyhanni.data.GardenComposterUpgradesData import at.hannibal2.skyhanni.data.GardenCropMilestones +import at.hannibal2.skyhanni.data.GardenCropMilestonesCommunityFix import at.hannibal2.skyhanni.data.GardenCropUpgrades import at.hannibal2.skyhanni.data.GuiEditManager import at.hannibal2.skyhanni.data.GuildAPI @@ -362,6 +363,7 @@ class SkyHanniMod { loadModule(TabListData()) loadModule(RenderData()) loadModule(GardenCropMilestones) + loadModule(GardenCropMilestonesCommunityFix) loadModule(GardenCropUpgrades()) loadModule(VisitorListener()) loadModule(OwnInventoryData()) diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 641dc912d..8e4791901 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigFileType import at.hannibal2.skyhanni.config.ConfigGuiManager import at.hannibal2.skyhanni.data.ChatManager -import at.hannibal2.skyhanni.data.GardenCropMilestonesFix +import at.hannibal2.skyhanni.data.GardenCropMilestonesCommunityFix import at.hannibal2.skyhanni.data.GuiEditManager import at.hannibal2.skyhanni.data.PartyAPI import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay @@ -318,7 +318,7 @@ object Commands { registerCommand( "readcropmilestonefromclipboard", "Read crop milestone from clipboard. This helps fixing wrong crop milestone data" - ) { GardenCropMilestonesFix.readDataFromClipboard() } + ) { GardenCropMilestonesCommunityFix.readDataFromClipboard() } } private fun internalCommands() { diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt index d810121ed..610393906 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestones.kt @@ -41,7 +41,7 @@ object GardenCropMilestones { } } CropMilestoneUpdateEvent().postAndCatch() - GardenCropMilestonesFix.openInventory(event.inventoryItems) + GardenCropMilestonesCommunityFix.openInventory(event.inventoryItems) } var cropMilestoneData: Map> = emptyMap() diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt new file mode 100644 index 000000000..c97997262 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt @@ -0,0 +1,179 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.features.garden.CropType +import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy +import at.hannibal2.skyhanni.utils.LorenzUtils.nextAfter +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber +import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNeeded +import at.hannibal2.skyhanni.utils.OSUtils +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.matches +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.jsonobjects.GardenJson +import kotlinx.coroutines.launch +import net.minecraft.item.ItemStack +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object GardenCropMilestonesCommunityFix { + private val pattern = ".*§e(?.*)§6/§e(?.*)".toPattern() + private var showWrongData = false + private var showWhenAllCorrect = false + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant("Garden") + val map = data.crop_milestone_community_help ?: return + for ((key, value) in map) { + if (key == "show_wrong_data") { + showWrongData = value + } + if (key == "show_when_all_correct") { + showWhenAllCorrect = value + } + } + } + + fun openInventory(inventoryItems: Map) { + if (!showWrongData) return + if (!SkyHanniMod.feature.garden.copyMilestoneData) return + fixForWrongData(inventoryItems) + } + + private fun fixForWrongData(inventoryItems: Map) { + val data = mutableListOf() + for ((_, stack) in inventoryItems) { + val crop = GardenCropMilestones.getCropTypeByLore(stack) ?: continue + checkForWrongData(stack, crop, data) + + CropMilestoneUpdateEvent().postAndCatch() + } + + if (data.isNotEmpty()) { + LorenzUtils.chat( + "Found §c${data.size} §ewrong crop milestone steps in the menu! " + + "Correct data got put into clipboard. " + + "Please share it on the §bSkyHanni Discord §ein the channel §b#share-data§e." + ) + OSUtils.copyToClipboard("```${data.joinToString("\n")}```") + } else { + if (showWhenAllCorrect) { + LorenzUtils.chat("No wrong crop milestone steps found!") + } + } + } + + private fun checkForWrongData( + stack: ItemStack, + crop: CropType, + wrongData: MutableList + ) { + val name = stack.name ?: return + val rawNumber = name.removeColor().replace(crop.cropName, "").trim() + val realTier = if (rawNumber == "") 0 else rawNumber.romanToDecimalIfNeeded() + + val lore = stack.getLore() + val next = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 3) ?: return + val total = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 6) ?: return + +// debug(" ") +// debug("crop: $crop") +// debug("realTier: $realTier") + + val guessNextMax = GardenCropMilestones.getCropsForTier( + realTier + 1, + crop + ) - GardenCropMilestones.getCropsForTier(realTier, crop) +// debug("guessNextMax: ${guessNextMax.addSeparators()}") + val nextMax = pattern.matchMatcher(next) { + group("max").formatNumber() + } ?: return +// debug("nextMax real: ${nextMax.addSeparators()}") + if (nextMax != guessNextMax) { +// debug("wrong, add to list") + wrongData.add("$crop:$realTier:${nextMax.addSeparators()}") + } + + val guessTotalMax = GardenCropMilestones.getCropsForTier(46, crop) +// println("guessTotalMax: ${guessTotalMax.addSeparators()}") + val totalMax = pattern.matchMatcher(total) { + group("max").formatNumber() + } ?: return +// println("totalMax real: ${totalMax.addSeparators()}") + val totalOffBy = guessTotalMax - totalMax +// debug("$crop total offf by: ${totalOffBy.addSeparators()}") + } + +// fun debug(message: String) { +// if (SkyHanniMod.feature.dev.debug.enabled) { +// println(message) +// } +// } + + /** + * This helps to fix wrong crop milestone data + * This command reads the clipboard content, + * in the format of users sending crop milestone step data. + * + * The new data will be compared to the currently saved data, + * differences are getting replaced, and the result gets put into the clipboard. + * The clipboard context can be used to update the repo content. + */ + fun readDataFromClipboard() { + SkyHanniMod.coroutineScope.launch { + OSUtils.readFromClipboard()?.let { + handleInput(it) + } + } + } + + private var totalFixedValues = 0 + + private fun handleInput(input: String) { + println(" ") + var fixed = 0 + var alreadyCorrect = 0 + for (line in input.lines()) { + val split = line.replace("```", "").replace(".", ",").split(":") + if (split.size != 3) continue + val (rawCrop, tier, amount) = split + val crop = LorenzUtils.enumValueOf(rawCrop) + + if (tryFix(crop, tier.toInt(), amount.formatNumber().toInt())) { + fixed++ + } else { + alreadyCorrect++ + } + } + totalFixedValues += fixed + LorenzUtils.chat("Fixed: $fixed/$alreadyCorrect, total fixes: $totalFixedValues") + val s = ConfigManager.gson.toJsonTree(GardenCropMilestones.cropMilestoneData).toString() + OSUtils.copyToClipboard("\"crop_milestones\":$s,") + } + + private fun tryFix(crop: CropType, tier: Int, amount: Int): Boolean { + val guessNextMax = GardenCropMilestones.getCropsForTier(tier + 1, crop) - GardenCropMilestones.getCropsForTier( + tier, + crop + ) + if (guessNextMax.toInt() == amount) { + return false + } + GardenCropMilestones.cropMilestoneData = GardenCropMilestones.cropMilestoneData.editCopy { + fix(crop, this, tier, amount) + } + return true + } + + private fun fix(crop: CropType, map: MutableMap>, tier: Int, amount: Int) { + map[crop] = map[crop]!!.editCopy { + this[tier] = amount + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt deleted file mode 100644 index cad8fdddf..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesFix.kt +++ /dev/null @@ -1,159 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigManager -import at.hannibal2.skyhanni.events.CropMilestoneUpdateEvent -import at.hannibal2.skyhanni.features.garden.CropType -import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy -import at.hannibal2.skyhanni.utils.LorenzUtils.nextAfter -import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber -import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNeeded -import at.hannibal2.skyhanni.utils.OSUtils -import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher -import at.hannibal2.skyhanni.utils.StringUtils.matches -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import kotlinx.coroutines.launch -import net.minecraft.item.ItemStack - -object GardenCropMilestonesFix { - private val pattern = ".*§e(?.*)§6/§e(?.*)".toPattern() - - fun openInventory(inventoryItems: Map) { - if (SkyHanniMod.feature.garden.copyMilestoneData) { - fixForWrongData(inventoryItems) - } - } - - private fun fixForWrongData(inventoryItems: Map) { - val data = mutableListOf() - for ((_, stack) in inventoryItems) { - val crop = GardenCropMilestones.getCropTypeByLore(stack) ?: continue - checkForWrongData(stack, crop, data) - - CropMilestoneUpdateEvent().postAndCatch() - } - - if (data.isNotEmpty()) { - LorenzUtils.chat( - "Found §c${data.size} §ewrong crop milestone steps in the menu! " + - "Correct data got put into clipboard. " + - "Please share it on the §bSkyHanni Discord §ein the channel §b#share-data§e." - ) - OSUtils.copyToClipboard("```${data.joinToString("\n")}```") -// } else { -// LorenzUtils.chat("No wrong crop milestone steps found!") - } - } - - private fun checkForWrongData( - stack: ItemStack, - crop: CropType, - wrongData: MutableList - ) { - val name = stack.name ?: return - val rawNumber = name.removeColor().replace(crop.cropName, "").trim() - val realTier = if (rawNumber == "") 0 else rawNumber.romanToDecimalIfNeeded() - - val lore = stack.getLore() - val next = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 3) ?: return - val total = lore.nextAfter({ GardenCropMilestones.totalPattern.matches(it) }, 6) ?: return - -// debug(" ") -// debug("crop: $crop") -// debug("realTier: $realTier") - - val guessNextMax = GardenCropMilestones.getCropsForTier( - realTier + 1, - crop - ) - GardenCropMilestones.getCropsForTier(realTier, crop) -// debug("guessNextMax: ${guessNextMax.addSeparators()}") - val nextMax = pattern.matchMatcher(next) { - group("max").formatNumber() - } ?: return -// debug("nextMax real: ${nextMax.addSeparators()}") - if (nextMax != guessNextMax) { -// debug("wrong, add to list") - wrongData.add("$crop:$realTier:${nextMax.addSeparators()}") - } - - val guessTotalMax = GardenCropMilestones.getCropsForTier(46, crop) -// println("guessTotalMax: ${guessTotalMax.addSeparators()}") - val totalMax = pattern.matchMatcher(total) { - group("max").formatNumber() - } ?: return -// println("totalMax real: ${totalMax.addSeparators()}") - val totalOffBy = guessTotalMax - totalMax -// debug("$crop total offf by: ${totalOffBy.addSeparators()}") - } - -// fun debug(message: String) { -// if (SkyHanniMod.feature.dev.debug.enabled) { -// println(message) -// } -// } - - /** - * This helps to fix wrong crop milestone data - * This command reads the clipboard content, - * in the format of users sending crop milestone step data. - * - * The new data will be compared to the currently saved data, - * differences are getting replaced, and the result gets put into the clipboard. - * The clipboard context can be used to update the repo content. - */ - fun readDataFromClipboard() { - SkyHanniMod.coroutineScope.launch { - OSUtils.readFromClipboard()?.let { - handleInput(it) - } - } - } - - private var totalFixedValues = 0 - - private fun handleInput(input: String) { - println(" ") - var fixed = 0 - var alreadyCorrect = 0 - for (line in input.lines()) { - val split = line.replace("```", "").replace(".", ",").split(":") - if (split.size != 3) continue - val (rawCrop, tier, amount) = split - val crop = LorenzUtils.enumValueOf(rawCrop) - - if (tryFix(crop, tier.toInt(), amount.formatNumber().toInt())) { - fixed++ - } else { - alreadyCorrect++ - } - } - totalFixedValues += fixed - LorenzUtils.chat("Fixed: $fixed/$alreadyCorrect, total fixes: $totalFixedValues") - val s = ConfigManager.gson.toJsonTree(GardenCropMilestones.cropMilestoneData).toString() - OSUtils.copyToClipboard("\"crop_milestones\":$s,") - } - - private fun tryFix(crop: CropType, tier: Int, amount: Int): Boolean { - val guessNextMax = GardenCropMilestones.getCropsForTier(tier + 1, crop) - GardenCropMilestones.getCropsForTier( - tier, - crop - ) - if (guessNextMax.toInt() == amount) { - return false - } - GardenCropMilestones.cropMilestoneData = GardenCropMilestones.cropMilestoneData.editCopy { - fix(crop, this, tier, amount) - } - return true - } - - private fun fix(crop: CropType, map: MutableMap>, tier: Int, amount: Int) { - map[crop] = map[crop]!!.editCopy { - this[tier] = amount - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java index cc8bcd51d..7bc9cf7fa 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/GardenJson.java @@ -16,6 +16,9 @@ public class GardenJson { @Expose public Map> crop_milestones; + @Expose + public Map crop_milestone_community_help; + @Expose public Map visitors; -- cgit From 31f65742ccca74a6afec114ee289f72b53b2682e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:49:14 +0100 Subject: removed small errors --- .../java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt | 2 -- .../at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt | 2 -- .../java/at/hannibal2/skyhanni/features/fishing/SeaCreatureManager.kt | 1 - 3 files changed, 5 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt index c97997262..f9990685d 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GardenCropMilestonesCommunityFix.kt @@ -51,8 +51,6 @@ object GardenCropMilestonesCommunityFix { for ((_, stack) in inventoryItems) { val crop = GardenCropMilestones.getCropTypeByLore(stack) ?: continue checkForWrongData(stack, crop, data) - - CropMilestoneUpdateEvent().postAndCatch() } if (data.isNotEmpty()) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt index 9501b9d49..ed1a256d5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt @@ -1,7 +1,6 @@ package at.hannibal2.skyhanni.features.chat.playerchat import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.MultiFilter import at.hannibal2.skyhanni.utils.jsonobjects.PlayerChatFilterJson import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -40,6 +39,5 @@ class PlayerChatFilter { countCategories++ countFilters += filter.count() } - LorenzUtils.debug("Loaded $countFilters filters in $countCategories categories from repo") } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureManager.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureManager.kt index c41129c5f..f0a3c54b1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/SeaCreatureManager.kt @@ -53,7 +53,6 @@ class SeaCreatureManager { } } SeaCreatureManager.allFishingMobs = allFishingMobs - LorenzUtils.debug("Loaded $counter sea creatures from repo") } -- cgit From 6965c72c60ed68ee2fea4b0249f1cec463c4ac8b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 19:09:17 +0100 Subject: Removed 100 Farming Fortune from "Show As Drop Multiplier" from all displays (also known as "base ff"). --- .../features/garden/FarmingFortuneConfig.java | 9 --------- .../features/garden/FarmingFortuneDisplay.kt | 12 ++++------- .../garden/contest/JacobContestFFNeededDisplay.kt | 23 +++++++--------------- .../garden/farming/GardenCropMilestoneDisplay.kt | 2 +- 4 files changed, 12 insertions(+), 34 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/garden/FarmingFortuneConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/garden/FarmingFortuneConfig.java index aadf97fee..ff5f6c62d 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/garden/FarmingFortuneConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/garden/FarmingFortuneConfig.java @@ -18,15 +18,6 @@ public class FarmingFortuneConfig { @FeatureToggle public boolean display = true; - @Expose - @ConfigOption( - name = "Show As Drop Multiplier", - desc = "Adds 100 to the displayed Farming Fortune so that it represents a drop multiplier rather than" + - " the chance for bonus drops. " - ) - @ConfigEditorBoolean - public boolean dropMultiplier = true; - @ConfigOption(name = "Farming Fortune Guide", desc = "Opens a guide that breaks down your Farming Fortune.\n§eCommand: /ff") @ConfigEditorButton(buttonText = "Open") public Runnable open = Commands::openFortuneGuide; diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index ac48b1ec2..982ff7bc1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -102,9 +102,7 @@ class FarmingFortuneDisplay { wrongTabCrop = GardenAPI.cropInHand != null && GardenAPI.cropInHand != currentCrop if (wrongTabCrop) { - farmingFortune = displayCrop.getLatestTrueFarmingFortune()?.let { - if (config.dropMultiplier) it else it - 100.0 - } ?: -1.0 + farmingFortune = displayCrop.getLatestTrueFarmingFortune() ?: -1.0 recentlySwitchedTool = false } else { farmingFortune = getCurrentFarmingFortune() @@ -118,7 +116,7 @@ class FarmingFortuneDisplay { if (GardenAPI.cropInHand == currentCrop) { if (!recentlySwitchedTool) { - latestFF?.put(currentCrop, getCurrentFarmingFortune(true)) + latestFF?.put(currentCrop, getCurrentFarmingFortune()) } } }) @@ -156,7 +154,6 @@ class FarmingFortuneDisplay { private var tabFortuneUniversal: Double = 0.0 private var tabFortuneCrop: Double = 0.0 - private val baseFortune: Double get() = if (config.dropMultiplier) 100.0 else 0.0 private val upgradeFortune: Double? get() = currentCrop?.getUpgradeLevel()?.let { it * 5.0 } private val accessoryFortune: Double? get() = currentCrop?.let { @@ -269,9 +266,8 @@ class FarmingFortuneDisplay { } } - fun getCurrentFarmingFortune(alwaysBaseFortune: Boolean = false): Double { - val baseFortune = if (alwaysBaseFortune) 100.0 else baseFortune - return baseFortune + tabFortuneUniversal + tabFortuneCrop + fun getCurrentFarmingFortune(): Double { + return tabFortuneUniversal + tabFortuneCrop } fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt index bcdc6b216..ec3284ef0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt @@ -96,25 +96,16 @@ class JacobContestFFNeededDisplay { add(listOf("§6Your ", crop.icon, "§6FF: $farmingFortune")) } addAsSingletonList("") - if (blocksPerSecond == null || trueFF == null) { - add(listOf("§cMissing data from above!")) - } else { - val predictedScore = (trueFF * blocksPerSecond * crop.baseDrops * 20 * 60 / 100).toInt().addSeparators() - add(listOf("§6Predicted ", crop.icon, "§6crops: $predictedScore")) - } - } - - private fun formatFarmingFortune(farmingFortune: Double): String { - var ff = farmingFortune - if (!config.farmingFortunes.dropMultiplier) { - ff -= 100 - if (ff < 100) { - ff = 0.0 - } + if (blocksPerSecond == null || trueFF == null) { + add(listOf("§cMissing data from above!")) + } else { + val predictedScore = (trueFF * blocksPerSecond * crop.baseDrops * 20 * 60 / 100).toInt().addSeparators() + add(listOf("§6Predicted ", crop.icon, "§6crops: $predictedScore")) } - return ceil(ff).addSeparators() } + private fun formatFarmingFortune(farmingFortune: Double) = ceil(farmingFortune).addSeparators() + private fun getLine(bracket: ContestBracket, map: Map, crop: CropType): String { val counter = map[bracket] ?: return " ${bracket.displayName}§f: §8Not found!" val blocksPerSecond = crop.getRealBlocksPerSecond() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt index dae3e129f..781af77e8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt @@ -165,7 +165,7 @@ object GardenCropMilestoneDisplay { Collections.singletonList("§e$haveFormat§8/§e$needFormat") } - val farmingFortune = FarmingFortuneDisplay.getCurrentFarmingFortune(true) + val farmingFortune = FarmingFortuneDisplay.getCurrentFarmingFortune() val speed = GardenCropSpeed.averageBlocksPerSecond val farmingFortuneSpeed = (farmingFortune * crop.baseDrops * speed / 100).round(1).toInt() -- cgit From 16b914abed6e58f2a89be04560f649b0353da318 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 21:06:19 +0100 Subject: Fixed farming contest summary not showing when the crop is buffed by Anita Talisman/Ring/Artifact. --- .../features/garden/contest/FarmingContestAPI.kt | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt index c5bb8d2a8..33335c4ab 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt @@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut +import at.hannibal2.skyhanni.utils.LorenzUtils.nextAfter import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -26,7 +27,7 @@ object FarmingContestAPI { var inContest = false var contestCrop: CropType? = null private var startTime = SimpleTimeMark.farPast() - private val sidebarCropPattern = "§e○ §f(?.*) §a.*".toPattern() + private val sidebarCropPattern = "(?:§e○|§6☘) §f(?.*) §a.*".toPattern() var inInventory = false @@ -69,17 +70,9 @@ object FarmingContestAPI { } private fun readCurrentCrop(): CropType? { - var next = false - for (line in ScoreboardData.sidebarLinesFormatted) { - if (line == "§eJacob's Contest") { - next = true - continue - } - if (next) { - sidebarCropPattern.matchMatcher(line) { - return CropType.getByName(group("crop")) - } - } + val line = ScoreboardData.sidebarLinesFormatted.nextAfter("§eJacob's Contest") ?: return null + sidebarCropPattern.matchMatcher(line) { + return CropType.getByName(group("crop")) } return null -- cgit From d72056eebbf41378826131a9b1ee76159244646e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 21:07:17 +0100 Subject: code cleanup --- .../hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt index 33335c4ab..d2d866f36 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt @@ -71,11 +71,9 @@ object FarmingContestAPI { private fun readCurrentCrop(): CropType? { val line = ScoreboardData.sidebarLinesFormatted.nextAfter("§eJacob's Contest") ?: return null - sidebarCropPattern.matchMatcher(line) { - return CropType.getByName(group("crop")) + return sidebarCropPattern.matchMatcher(line) { + CropType.getByName(group("crop")) } - - return null } @SubscribeEvent -- cgit From ce6d65565f5bc93791d015f90c03f2cf77c661b7 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 21:46:16 +0100 Subject: Show max crop milestone only below tier 20 --- .../features/garden/inventory/GardenCropMilestoneInventory.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenCropMilestoneInventory.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenCropMilestoneInventory.kt index 495696a3e..cb236050b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenCropMilestoneInventory.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/GardenCropMilestoneInventory.kt @@ -58,6 +58,8 @@ class GardenCropMilestoneInventory { val itemStack = event.itemStack ?: return val crop = GardenCropMilestones.getCropTypeByLore(itemStack) ?: return + val tier = GardenCropMilestones.getTierForCropCount(crop.getCounter(), crop) + if (tier > 20) return val maxTier = GardenCropMilestones.getMaxTier() val maxCounter = GardenCropMilestones.getCropsForTier(maxTier, crop) @@ -81,4 +83,4 @@ class GardenCropMilestoneInventory { event.move(3, "garden.numberAverageCropMilestone", "garden.number.averageCropMilestone") event.move(3, "garden.cropMilestoneTotalProgress", "garden.tooltipTweak.cropMilestoneTotalProgress") } -} \ No newline at end of file +} -- cgit From b767e42d07aa31d66bd2dd96e4ee086edbb13e5e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 22:08:25 +0100 Subject: Make FF Display only visible while holding a farming tool in hand. --- .../at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index 982ff7bc1..e200ec9f6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -72,6 +72,7 @@ class FarmingFortuneDisplay { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return if (GardenAPI.hideExtraGuis()) return + if (GardenAPI.cropInHand == null) return config.pos.renderStringsAndItems(display, posLabel = "True Farming Fortune") } @@ -266,9 +267,7 @@ class FarmingFortuneDisplay { } } - fun getCurrentFarmingFortune(): Double { - return tabFortuneUniversal + tabFortuneCrop - } + fun getCurrentFarmingFortune() = tabFortuneUniversal + tabFortuneCrop fun CropType.getLatestTrueFarmingFortune() = latestFF?.get(this) } -- cgit From ac60b52cbd9c30efe50a7d0421ccee082119fc8b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Tue, 21 Nov 2023 22:31:07 +0100 Subject: 0.21.1 Beta 7 --- CHANGELOG.md | 17 ++++++++++++++++- build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ce3f340..17e028cb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,6 @@ ### Changes - #### Garden Changes + Added mythic/Maeve visitor support. - walker & hannibal2 @@ -25,6 +24,11 @@ + Use the crop fortune from tab in Farming Fortune HUD. - alexia + Shows the last saved ff value in gray while switching tools instead of the question mark. - hannibal2 + Removed chat message that your crop milestone data is correct. - hannibal2 ++ Removed the message when crop milestones look different in the menu than stored SkyHanni data. - hannibal2 + + We already have the correct data now, and Hypixel rounds the numbers in the menu poorly. + + Only show the Total Crop Milestone info in crop milestone inventory when below tier 20. - hannibal2 + + Hypixel now has their own line for the same information for tier 20+ ++ Make the FF Display only visible while holding a farming tool in hand. - hannibal2 #### Other Changes @@ -32,6 +36,7 @@ + Add option to hide the chat message when toggling /shmouselock. - hannibal2 + Reminds to use the GUI Position Editor hotkey. - hannibal2 + Reminds every 30 minutes after using /sh gui or clicking the GUI edit button. ++ Added Bookworm Book to the Estimated Item Value feature. - jani ### Fixes @@ -52,6 +57,8 @@ + Added cooldown to prevent spam clicking on farming weight buttons to open many web pages. - hannibal2 + Fixed clickable farming weight GUI no longer opens #1000 in lb website. - hannibal2 + Fixed /ff upgrade suggests updating bustling reforge even when no farming armor is found. - hannibal2 ++ Fixed maxed sunder fortune in the /ff stats breakdown. - alexia ++ Fixed the farming contest summary not showing when the crop is buffed by Anita Talisman/Ring/Artifact. - hannibal2 #### Other Fixes @@ -80,6 +87,14 @@ + The new data gets compared to the currently saved data, differences are getting replaced and the result gets put into the clipboard. The clipboard context can be used to update the repo content. +### Removed Features + ++ Removed 100 Farming Fortune from "Show As Drop Multiplier" from all displays (also known as "base ff"). - hannibal2 + + This can cause some numbers to show 100 FF too much. Simply update the values to fix it. + + Those "base FF" values were never really part of your farming fortune stats. They are just a result of looking at + the crop drop formula. SkyHanni used those values to be more comparable with other Discord Bots and spreadsheets. + This also caused confusion, so we have removed it entirely now. + ## Version 0.21 ### New Features diff --git a/build.gradle.kts b/build.gradle.kts index b79a287b1..8f7171956 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.1.Beta.6" +version = "0.21.1.Beta.7" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index a7c3584b6..8cf9cab27 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -332,7 +332,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.1.Beta.6", + version = "0.21.1.Beta.7", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 75f6b3be1876518753b5d75dbbf6bd263021ee04 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:05:21 +0100 Subject: Fixed Farming Fortune Display not showing for non crop specific tools. --- .../java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt index e200ec9f6..3e57bb199 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt @@ -72,7 +72,7 @@ class FarmingFortuneDisplay { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return if (GardenAPI.hideExtraGuis()) return - if (GardenAPI.cropInHand == null) return + if (GardenAPI.toolInHand == null) return config.pos.renderStringsAndItems(display, posLabel = "True Farming Fortune") } -- cgit From ab13293cdad056ccc4552ec339cf2b9d86a0cbd6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:05:30 +0100 Subject: Fixed crimson isle faction icon in tab list showing twice and not going away fully when enabling the "hide faction" option of advanced player list. --- .../skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index a521bb0ed..7c96f4efa 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -73,8 +73,7 @@ object AdvancedPlayerList { playerData.levelText = levelText index++ if (name.size > index) { - val nameSuffix = name.drop(index).joinToString(" ") - playerData.nameSuffix = nameSuffix + var nameSuffix = name.drop(index).joinToString(" ") if (nameSuffix.contains("♲")) { playerData.ironman = true } else { @@ -82,13 +81,16 @@ object AdvancedPlayerList { } if (IslandType.CRIMSON_ISLE.isInIsland()) { playerData.faction = if (line.contains("§c⚒")) { + nameSuffix = nameSuffix.replace("§c⚒", "") CrimsonIsleFaction.BARBARIAN } else if (line.contains("§5ቾ")) { + nameSuffix = nameSuffix.replace("§5ቾ", "") CrimsonIsleFaction.MAGE } else { CrimsonIsleFaction.NONE } } + playerData.nameSuffix = nameSuffix } else { playerData.nameSuffix = "" } -- cgit From 754e41275d0d67cf5043c2fafbbb4006153fcd74 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:43:00 +0100 Subject: Using visitor amount from repo to calculate the green thumb bonus in /ff. --- src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt | 2 ++ .../skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt index 01a6d3827..75fd7e9d2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt @@ -51,6 +51,7 @@ object GardenAPI { private var inBarn = false val onBarnPlot get() = inBarn && inGarden() val storage get() = ProfileStorageData.profileSpecific?.garden + var totalAmountVisitorsExisting = 0 var gardenExp: Long? get() = storage?.experience set(value) { @@ -239,6 +240,7 @@ object GardenAPI { fun onRepoReload(event: RepositoryReloadEvent) { val data = event.getConstant("Garden") gardenExperience = data.garden_exp + totalAmountVisitorsExisting = data.visitors.size } private var gardenExperience = listOf() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt index 4e06ee1cb..44beaca34 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.features.garden.fortuneguide.pages +import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI.Companion.currentArmor import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI.Companion.currentEquipment @@ -204,10 +205,11 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { if (currentEquipment == 0) 60 else 15, FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + val maxGreenThumbFortune = GardenAPI.totalAmountVisitorsExisting.toDouble() / 4 line = if (currentEquipment == 0) "§7§2The fortune from all of your equipment's enchantments\n§2Select a piece for more info" else "§7§2Total enchantment fortune from your\n${equipmentItem.getItem().displayName}" GuiRenderUtils.drawFarmingBar("§2$word Enchantment", line, equipmentFF[FFTypes.GREEN_THUMB] ?: 0, - if (currentEquipment == 0) 78 else 19.5, + if (currentEquipment == 0) maxGreenThumbFortune * 4 else maxGreenThumbFortune, FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 130, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) } -} \ No newline at end of file +} -- cgit From 97db59ea2efe455a2fd1f98fecdcbce8a7555ba7 Mon Sep 17 00:00:00 2001 From: alexia Date: Wed, 22 Nov 2023 11:47:29 +0100 Subject: Fix crops per minute calculation (#725) Fixed crops per second and time remaining not using the 100 base ff in their formula. #725 --- .../skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt index 781af77e8..2a8355eab 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt @@ -167,7 +167,7 @@ object GardenCropMilestoneDisplay { val farmingFortune = FarmingFortuneDisplay.getCurrentFarmingFortune() val speed = GardenCropSpeed.averageBlocksPerSecond - val farmingFortuneSpeed = (farmingFortune * crop.baseDrops * speed / 100).round(1).toInt() + val farmingFortuneSpeed = ((100.0 + farmingFortune) * crop.baseDrops * speed / 100).round(1).toInt() if (farmingFortuneSpeed > 0) { crop.setSpeed(farmingFortuneSpeed) -- cgit From 522e516d4edf0c2f5f96883ba223ea625a0befa7 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:50:53 +0100 Subject: Hide in crop milestone display the line with time remaining entirely when the milestone is maxed. --- .../skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt index 2a8355eab..76647517d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropMilestoneDisplay.kt @@ -171,9 +171,7 @@ object GardenCropMilestoneDisplay { if (farmingFortuneSpeed > 0) { crop.setSpeed(farmingFortuneSpeed) - if (crop.isMaxed()) { - lineMap[3] = listOf("§7In §bMaxed") - } else { + if (!crop.isMaxed()) { val missing = need - have val missingTimeSeconds = missing / farmingFortuneSpeed val millis = missingTimeSeconds * 1000 -- cgit From 5d1e9a07eabe3872c714b17b64b7a6e0a0073d73 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 12:08:35 +0100 Subject: 0.21.1 --- CHANGELOG.md | 8 +++++++- build.gradle.kts | 2 +- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e028cb7..884017ef6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # SkyHanni - Change Log -## Version 0.21.1 (unreleased) +## Version 0.21.1 ### New Features @@ -29,6 +29,7 @@ + Only show the Total Crop Milestone info in crop milestone inventory when below tier 20. - hannibal2 + Hypixel now has their own line for the same information for tier 20+ + Make the FF Display only visible while holding a farming tool in hand. - hannibal2 ++ Hide in crop milestone display the line with time remaining entirely when the milestone is maxed. - hannibal2 #### Other Changes @@ -59,6 +60,9 @@ + Fixed /ff upgrade suggests updating bustling reforge even when no farming armor is found. - hannibal2 + Fixed maxed sunder fortune in the /ff stats breakdown. - alexia + Fixed the farming contest summary not showing when the crop is buffed by Anita Talisman/Ring/Artifact. - hannibal2 ++ Fixed Farming Fortune Display not showing for non crop-specific tools. - hannibal2 ++ Fixed green thumb fortune in /ff to include Maeve. - hannibal2 ++ Fixed crops per second and time remaining not using the 100 base ff in their formula. - alexia #### Other Fixes @@ -71,6 +75,8 @@ + Fixed Sack Display sometimes not formatting a million correctly. - Hize + Fixed Estimated Item Value getting shown in stats breakdown menu. - hannibal2 + Fixed a bug with the ender chest and SkyHanni GUI editor. - hannibal2 ++ Fixed crimson isle faction icon in tab list showing twice and not going away fully when enabling the "hide faction" + option of advanced player list. - hannibal2 ### Technical Details diff --git a/build.gradle.kts b/build.gradle.kts index 8f7171956..5abe8290f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "at.hannibal2.skyhanni" -version = "0.21.1.Beta.7" +version = "0.21.1" // Toolchains: java { diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 8cf9cab27..f974d3d1d 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -332,7 +332,7 @@ import org.apache.logging.log4j.Logger clientSideOnly = true, useMetadata = true, guiFactory = "at.hannibal2.skyhanni.config.ConfigGuiForgeInterop", - version = "0.21.1.Beta.7", + version = "0.21.1", ) class SkyHanniMod { @Mod.EventHandler -- cgit From 4ff0a7de8109b748cdaa707e9714478140095171 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Wed, 22 Nov 2023 11:50:00 +0000 Subject: Internal Change: Reformat Code to match .editorconfig (#628) Code cleanup done everywhere #628 --- src/main/java/SkyHanniInstallerFrame.java | 34 +++--- .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 2 +- .../skyhanni/events/RenderEntityOutlineEvent.kt | 4 +- .../skyhanni/features/bingo/BingoCardDisplay.kt | 1 + .../skyhanni/features/bingo/BingoNextStepHelper.kt | 27 +++-- .../skyhanni/features/bingo/MinionCraftHelper.kt | 1 + .../skyhanni/features/chat/PlayerDeathMessages.kt | 11 +- .../skyhanni/features/chat/WatchdogHider.kt | 2 + .../skyhanni/features/chroma/ChromaFontRenderer.kt | 8 +- .../skyhanni/features/chroma/ChromaShader.kt | 5 +- .../features/combat/ghostcounter/GhostData.kt | 26 ++-- .../skyhanni/features/dungeon/DungeonCleanEnd.kt | 3 +- .../features/dungeon/DungeonDeathCounter.kt | 5 +- .../features/dungeon/DungeonFinderFeatures.kt | 7 +- .../skyhanni/features/dungeon/DungeonHideItems.kt | 8 +- .../features/dungeon/DungeonMilestonesDisplay.kt | 7 +- .../features/dungeon/DungeonTeammateOutlines.kt | 4 +- .../event/anniversary/Year300RaffleEvent.kt | 6 +- .../skyhanni/features/event/diana/BurrowType.kt | 10 +- .../skyhanni/features/event/diana/DianaAPI.kt | 2 +- .../hannibal2/skyhanni/features/garden/CropType.kt | 11 +- .../skyhanni/features/garden/GardenAPI.kt | 2 +- .../features/garden/GardenNextJacobContest.kt | 4 +- .../features/garden/composter/ComposterAPI.kt | 6 +- .../contest/JacobFarmingContestsInventory.kt | 6 +- .../features/garden/farming/CropMoneyDisplay.kt | 4 +- .../features/garden/fortuneguide/pages/CropPage.kt | 31 +++-- .../garden/fortuneguide/pages/OverviewPage.kt | 134 ++++++++++++++------- .../garden/fortuneguide/pages/UpgradePage.kt | 76 +++++++++--- .../garden/visitor/VisitorTooltipParser.kt | 2 +- .../mining/HighlightMiningCommissionMobs.kt | 2 +- .../skyhanni/features/misc/CollectionTracker.kt | 2 +- .../skyhanni/features/misc/MiscFeatures.kt | 5 +- .../features/misc/NonGodPotEffectDisplay.kt | 1 + .../skyhanni/features/misc/PlayerChatSymbols.kt | 17 +-- .../features/misc/SuperpairsClicksAlert.kt | 4 +- .../skyhanni/features/misc/TimeFeatures.kt | 5 +- .../features/misc/compacttablist/TabListReader.kt | 3 +- .../features/misc/discordrpc/DiscordStatus.kt | 4 +- .../features/misc/trevor/TrevorFeatures.kt | 3 +- .../skyhanni/features/misc/trevor/TrevorTracker.kt | 5 +- .../misc/update/GuiOptionEditorUpdateCheck.kt | 4 +- .../features/misc/visualwords/VisualWordGui.kt | 85 ++++++++++--- .../features/nether/ashfang/AshfangBlazingSouls.kt | 4 +- .../nether/ashfang/AshfangFreezeCooldown.kt | 4 +- .../features/nether/ashfang/AshfangGravityOrbs.kt | 6 +- .../nether/ashfang/AshfangHideDamageIndicator.kt | 4 +- .../nether/ashfang/AshfangNextResetCooldown.kt | 4 +- .../dailykuudra/DailyKuudraBossHelper.kt | 6 +- .../miniboss/DailyMiniBossHelper.kt | 8 +- .../at/hannibal2/skyhanni/features/rift/RiftAPI.kt | 4 +- .../area/livingcave/LivingCaveDefenseBlocks.kt | 6 +- .../area/livingcave/LivingCaveLivingMetalHelper.kt | 6 +- .../rift/everywhere/RiftHorsezookaHider.kt | 2 +- .../features/slayer/SlayerRngMeterDisplay.kt | 3 +- .../skyhanni/features/slayer/SlayerType.kt | 5 +- .../slayer/blaze/BlazeSlayerFirePitsWarning.kt | 3 +- .../features/summonings/SummoningMobManager.kt | 2 +- .../features/summonings/SummoningSoulsName.kt | 10 +- .../skyhanni/mixins/hooks/FontRendererHook.kt | 13 +- .../mixins/transformers/MixinFontRenderer.java | 4 +- .../mixins/transformers/gui/MixinGuiContainer.java | 12 +- .../test/SkyHanniConfigSearchResetCommand.kt | 2 +- .../test/command/CopyNearbyParticlesCommand.kt | 2 +- .../skyhanni/test/command/CopyScoreboardCommand.kt | 4 +- .../java/at/hannibal2/skyhanni/utils/APIUtil.kt | 8 +- .../at/hannibal2/skyhanni/utils/CachedItemData.kt | 23 ++-- .../skyhanni/utils/EntityOutlineRenderer.kt | 20 +-- .../at/hannibal2/skyhanni/utils/GuiRenderUtils.kt | 16 ++- .../at/hannibal2/skyhanni/utils/InventoryUtils.kt | 2 +- .../skyhanni/utils/MinecraftConsoleFilter.kt | 26 ++-- .../java/at/hannibal2/skyhanni/utils/NEUItems.kt | 4 +- .../at/hannibal2/skyhanni/utils/ParkourHelper.kt | 6 +- .../java/at/hannibal2/skyhanni/utils/SoundUtils.kt | 2 +- .../at/hannibal2/skyhanni/utils/StringUtils.kt | 3 +- src/main/java/at/hannibal2/skyhanni/utils/Timer.kt | 4 +- .../utils/jsonobjects/ContributorListJson.java | 3 +- .../skyhanni/utils/jsonobjects/MayorJson.java | 16 +-- .../utils/jsonobjects/SeaCreatureJson.java | 3 +- .../skyhanni/utils/renderables/Renderable.kt | 2 +- .../at/hannibal2/skyhanni/utils/shader/Shader.kt | 4 +- .../skyhanni/utils/shader/ShaderHelper.kt | 62 +++++++--- .../skyhanni/utils/shader/ShaderManager.kt | 12 +- .../at/hannibal2/skyhanni/utils/shader/Uniform.kt | 3 +- .../at/hannibal2/skyhanni/test/ItemUtilsTest.kt | 24 ++-- 85 files changed, 611 insertions(+), 335 deletions(-) (limited to 'src/main') diff --git a/src/main/java/SkyHanniInstallerFrame.java b/src/main/java/SkyHanniInstallerFrame.java index fa8868254..a9584dedf 100644 --- a/src/main/java/SkyHanniInstallerFrame.java +++ b/src/main/java/SkyHanniInstallerFrame.java @@ -166,8 +166,8 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo margin = 5; BufferedImage myPicture = ImageIO.read(Objects.requireNonNull(getClass() - .getClassLoader() - .getResourceAsStream("assets/skyhanni/logo.png"), "Logo not found.")); + .getClassLoader() + .getResourceAsStream("assets/skyhanni/logo.png"), "Logo not found.")); Image scaled = myPicture.getScaledInstance(w - margin * 2, h - margin, Image.SCALE_SMOOTH); logo = new JLabel(new ImageIcon(scaled)); logo.setName("Logo"); @@ -222,8 +222,8 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo descriptionText.setOpaque(false); descriptionText.setPreferredSize(new Dimension(w - margin * 2, h - margin)); descriptionText.setText( - "This installer will copy SkyHanni into your forge mods folder for you, and replace any old versions that already exist. " + - "Close this if you prefer to do this yourself!"); + "This installer will copy SkyHanni into your forge mods folder for you, and replace any old versions that already exist. " + + "Close this if you prefer to do this yourself!"); descriptionText.setWrapStyleWord(true); y += h; @@ -251,7 +251,7 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo forgeDescriptionText.setOpaque(false); forgeDescriptionText.setPreferredSize(new Dimension(w - margin * 2, h - margin)); forgeDescriptionText.setText( - "However, you still need to install Forge client in order to be able to run this mod. Click here to visit the download page for Forge 1.8.9!"); + "However, you still need to install Forge client in order to be able to run this mod. Click here to visit the download page for Forge 1.8.9!"); forgeDescriptionText.setForeground(Color.BLUE.darker()); forgeDescriptionText.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); forgeDescriptionText.setWrapStyleWord(true); @@ -315,8 +315,8 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo try { BufferedImage myPicture = ImageIO.read(Objects.requireNonNull(getClass() - .getClassLoader() - .getResourceAsStream("assets/skyhanni/folder.png"), "Folder icon not found.")); + .getClassLoader() + .getResourceAsStream("assets/skyhanni/folder.png"), "Folder icon not found.")); Image scaled = myPicture.getScaledInstance(w - 8, h - 6, Image.SCALE_SMOOTH); buttonChooseFolder = new JButton(new ImageIcon(scaled)); buttonChooseFolder.setName("ButtonFolder"); @@ -430,7 +430,7 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo if (e.getSource() == getForgeTextArea()) { try { Desktop.getDesktop().browse(new URI( - "http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.8.9.html")); + "http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.8.9.html")); } catch (IOException | URISyntaxException ex) { showErrorPopup(ex); } @@ -519,10 +519,10 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo } catch (Exception ex) { ex.printStackTrace(); showErrorMessage("Was not able to delete the other SkyHanni files found in your mods folder!" + - System.lineSeparator() + - "Please make sure that your minecraft is currently closed and try again, or feel" + - System.lineSeparator() + - "free to open your mods folder and delete those files manually."); + System.lineSeparator() + + "Please make sure that your minecraft is currently closed and try again, or feel" + + System.lineSeparator() + + "free to open your mods folder and delete those files manually."); return true; } continue; @@ -667,10 +667,10 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo private File getThisFile() { try { return new File(SkyHanniInstallerFrame.class - .getProtectionDomain() - .getCodeSource() - .getLocation() - .toURI()); + .getProtectionDomain() + .getCodeSource() + .getLocation() + .toURI()); } catch (URISyntaxException ex) { showErrorPopup(ex); } @@ -700,4 +700,4 @@ public class SkyHanniInstallerFrame extends JFrame implements ActionListener, Mo MACOS, UNKNOWN } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index 22beb125e..aa78bec09 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -190,6 +190,6 @@ class HypixelData { val displayName = objective.displayName val scoreboardTitle = displayName.removeColor() return scoreboardTitle.contains("SKYBLOCK") || - scoreboardTitle.contains("SKIBLOCK") // April 1st jokes are so funny + scoreboardTitle.contains("SKIBLOCK") // April 1st jokes are so funny } } diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderEntityOutlineEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderEntityOutlineEvent.kt index 21e18bd6c..6a197de6c 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/RenderEntityOutlineEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/RenderEntityOutlineEvent.kt @@ -7,7 +7,7 @@ import net.minecraft.entity.item.EntityItemFrame import java.util.function.Consumer class RenderEntityOutlineEvent(theType: Type?, potentialEntities: HashSet?) : - LorenzEvent() { + LorenzEvent() { /** * The phase of the event (see [Type] @@ -115,4 +115,4 @@ class RenderEntityOutlineEvent(theType: Type?, potentialEntities: HashSet() + // TODO USE SH-REPO private val goalCompletePattern = "§6§lBINGO GOAL COMPLETE! §r§e(?.*)".toPattern() diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoNextStepHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoNextStepHelper.kt index 8e74b434f..2960b2d22 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoNextStepHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoNextStepHelper.kt @@ -28,6 +28,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class BingoNextStepHelper { private val config get() = SkyHanniMod.feature.event.bingo.bingoCard private var dirty = true + // TODO USE SH-REPO private val crystalObtainedPattern = " *§r§e(?Topaz|Sapphire|Jade|Amethyst|Amber) Crystal".toPattern() private val itemIslandRequired = mutableMapOf() @@ -85,7 +86,7 @@ class BingoNextStepHelper { } if (!step.done && !parentDone && requirementsToDo == 0 && !currentSteps.contains(step)) { - currentSteps = currentSteps.editCopy { add(step) } + currentSteps = currentSteps.editCopy { add(step) } } } @@ -248,22 +249,22 @@ class BingoNextStepHelper { if (description == "Craft an Emerald Ring.") { return CraftStep("Emerald Ring") requires ( - ItemsStep( - "32x Enchanted Emerald", - "Emerald", - 160 * 32, - mapOf("Emerald" to 1, "Enchanted Emerald" to 160) - ) requires IslandType.DWARVEN_MINES.getStep()) + ItemsStep( + "32x Enchanted Emerald", + "Emerald", + 160 * 32, + mapOf("Emerald" to 1, "Enchanted Emerald" to 160) + ) requires IslandType.DWARVEN_MINES.getStep()) } if (description == "Obtain a Mathematical Hoe Blueprint.") { return CraftStep("Mathematical Hoe Blueprint") requires ( - ItemsStep( - "32x Jacob's Ticket", - "Jacob's Ticket", - 32, - mapOf("Jacob's Ticket" to 1) - ).addItemRequirements() requires IslandType.GARDEN.getStep()) + ItemsStep( + "32x Jacob's Ticket", + "Jacob's Ticket", + 32, + mapOf("Jacob's Ticket" to 1) + ).addItemRequirements() requires IslandType.GARDEN.getStep()) } crystalPattern.matchMatcher(description) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt index 0dc99f595..8657f76ee 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -23,6 +23,7 @@ import kotlin.time.Duration.Companion.seconds class MinionCraftHelper { private val config get() = SkyHanniMod.feature.event.bingo + // TODO USE SH-REPO private var minionNamePattern = "(?.*) Minion (?.*)".toPattern() private var display = emptyList() diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt index 87692135e..b9088bac6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt @@ -37,7 +37,10 @@ class PlayerDeathMessages { val message = event.message deathMessagePattern.matchMatcher(message) { val name = group("name") - if (SkyHanniMod.feature.markedPlayers.highlightInChat && !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight && MarkedPlayerManager.isMarkedPlayer(name)) { + if (SkyHanniMod.feature.markedPlayers.highlightInChat && !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight && MarkedPlayerManager.isMarkedPlayer( + name + ) + ) { val reason = group("reason").removeColor() LorenzUtils.chat(" §c☠ §e$name §7$reason", false) event.blockedReason = "marked_player_death" @@ -45,7 +48,11 @@ class PlayerDeathMessages { } - if (isHideFarDeathsEnabled() && System.currentTimeMillis() > lastTimePlayerSeen.getOrDefault(name, 0) + 30_000) { + if (isHideFarDeathsEnabled() && System.currentTimeMillis() > lastTimePlayerSeen.getOrDefault( + name, + 0 + ) + 30_000 + ) { event.blockedReason = "far_away_player_death" } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/WatchdogHider.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/WatchdogHider.kt index 739eaa123..c5eefc603 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/WatchdogHider.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/WatchdogHider.kt @@ -23,11 +23,13 @@ class WatchdogHider { startLineComponent = event.chatComponent blockedLines = 0 } + watchdogAnnouncementLine -> { ChatManager.retractMessage(startLineComponent, "watchdog") startLineComponent = null inWatchdog = true } + watchdogEndLine -> { event.blockedReason = "watchdog" inWatchdog = false diff --git a/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaFontRenderer.kt b/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaFontRenderer.kt index 981b7b33a..469fc2f3c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaFontRenderer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaFontRenderer.kt @@ -36,7 +36,7 @@ class ChromaFontRenderer(private val baseColor: Int) { } } - fun newChromaEnv() : ChromaFontRenderer { + fun newChromaEnv(): ChromaFontRenderer { if (ShaderHelper.areShadersSupported()) { ChromaShaderManager.begin() GlStateManager.shadeModel(GL11.GL_SMOOTH) @@ -44,7 +44,7 @@ class ChromaFontRenderer(private val baseColor: Int) { return this } - fun bindActualColor() : ChromaFontRenderer { + fun bindActualColor(): ChromaFontRenderer { GlStateManager.color( ColorUtils.getRed(baseColor).toFloat() / 255f, ColorUtils.getGreen(baseColor).toFloat() / 255f, @@ -54,7 +54,7 @@ class ChromaFontRenderer(private val baseColor: Int) { return this } - fun endChromaEnv() : ChromaFontRenderer { + fun endChromaEnv(): ChromaFontRenderer { if (ShaderHelper.areShadersSupported()) { ChromaShaderManager.end() GlStateManager.shadeModel(GL11.GL_FLAT) @@ -63,4 +63,4 @@ class ChromaFontRenderer(private val baseColor: Int) { } fun getChromaState() = chromaOn -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaShader.kt b/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaShader.kt index 00215b032..e7bedbdcd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaShader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chroma/ChromaShader.kt @@ -22,7 +22,8 @@ object ChromaShader : Shader("chroma", "chroma") { SkyHanniMod.feature.chroma.chromaSize * (Minecraft.getMinecraft().displayWidth / 100f) } registerUniform(Uniform.UniformType.FLOAT, "timeOffset") { - var ticks = (MinecraftData.totalTicks / 2) + (Minecraft.getMinecraft() as AccessorMinecraft).timer.renderPartialTicks + var ticks = + (MinecraftData.totalTicks / 2) + (Minecraft.getMinecraft() as AccessorMinecraft).timer.renderPartialTicks ticks = when (SkyHanniMod.feature.chroma.chromaDirection) { 0, 2 -> ticks @@ -44,4 +45,4 @@ object ChromaShader : Shader("chroma", "chroma") { } } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt index 69094b991..abcf2dbba 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostData.kt @@ -6,16 +6,16 @@ import kotlin.math.roundToInt object GhostData { private var session = mutableMapOf( - Option.KILLS to 0.0, - Option.SORROWCOUNT to 0.0, - Option.VOLTACOUNT to 0.0, - Option.PLASMACOUNT to 0.0, - Option.GHOSTLYBOOTS to 0.0, - Option.BAGOFCASH to 0.0, - Option.TOTALDROPS to 0.0, - Option.SCAVENGERCOINS to 0.0, - Option.MAXKILLCOMBO to 0.0, - Option.SKILLXPGAINED to 0.0 + Option.KILLS to 0.0, + Option.SORROWCOUNT to 0.0, + Option.VOLTACOUNT to 0.0, + Option.PLASMACOUNT to 0.0, + Option.GHOSTLYBOOTS to 0.0, + Option.BAGOFCASH to 0.0, + Option.TOTALDROPS to 0.0, + Option.SCAVENGERCOINS to 0.0, + Option.MAXKILLCOMBO to 0.0, + Option.SKILLXPGAINED to 0.0 ) val bestiaryData = mutableMapOf().apply { @@ -34,11 +34,11 @@ object GhostData { 11 -> 750 12 -> 1_500 13 -> 2_000 - 14,15,16,17 -> 2_500 + 14, 15, 16, 17 -> 2_500 18 -> 3_000 - 19,20 -> 3_500 + 19, 20 -> 3_500 21 -> 25_000 - 22,23,24,25 -> 50_000 + 22, 23, 24, 25 -> 50_000 else -> 0 } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt index 07a4edf18..6e5fc27bd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt @@ -90,7 +90,8 @@ class DungeonCleanEnd { && DungeonAPI.isOneOf("F3", "M3") && entity is EntityGuardian && entity.entityId != lastBossId - && Minecraft.getMinecraft().thePlayer.isSneaking) { + && Minecraft.getMinecraft().thePlayer.isSneaking + ) { return } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt index 88ab543f0..36788e4b3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonDeathCounter.kt @@ -88,7 +88,10 @@ class DungeonDeathCounter { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return - SkyHanniMod.feature.dungeon.deathCounterPos.renderString(DungeonMilestonesDisplay.color + display, posLabel = "Dungeon Death Counter") + SkyHanniMod.feature.dungeon.deathCounterPos.renderString( + DungeonMilestonesDisplay.color + display, + posLabel = "Dungeon Death Counter" + ) } private fun isEnabled(): Boolean { diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt index eceb28ad1..b824bc6a5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt @@ -26,7 +26,8 @@ class DungeonFinderFeatures { private val pricePattern = "([0-9]{2,3}K|[0-9]{1,3}M|[0-9]+\\.[0-9]M|[0-9] ?mil)".toRegex(RegexOption.IGNORE_CASE) private val carryPattern = "(carry|cary|carries|caries|comp|to cata [0-9]{2})".toRegex(RegexOption.IGNORE_CASE) private val memberPattern = "^ §.*?§.: §.([A-Z]+)§. \\(§.([0-9]+)§.\\)".toRegex(RegexOption.IGNORE_CASE) - private val ineligiblePattern = "^§c(Requires .*$|You don't meet the requirement!|Complete previous floor first!$)".toRegex() + private val ineligiblePattern = + "^§c(Requires .*$|You don't meet the requirement!|Complete previous floor first!$)".toRegex() private val classLevelPattern = " §.(?.*)§f: §e(?.*)§b \\(§e(?.*)§b\\)".toPattern() private val notePattern = "^(§7§7Note: |§f[^§])".toRegex() @@ -81,7 +82,7 @@ class DungeonFinderFeatures { if (!LorenzUtils.inSkyBlock || LorenzUtils.skyBlockArea != "Dungeon Hub") return if (event.inventoryName != "Catacombs Gate") return - val lore = event.inventoryItems[45]?.getLore() ?: return + val lore = event.inventoryItems[45]?.getLore() ?: return if (lore[0] == "§7View and select a dungeon class.") { selectedClass = lore[2].split(" ").last().removeColor() @@ -111,7 +112,7 @@ class DungeonFinderFeatures { } if (config.markPaidCarries) { - val note = slot.stack.getLore().filter { notePattern.containsMatchIn(it) }.joinToString(" ") ?: "" + val note = slot.stack.getLore().filter { notePattern.containsMatchIn(it) }.joinToString(" ") if (pricePattern.containsMatchIn(note) && carryPattern.containsMatchIn(note)) { slot highlight LorenzColor.RED diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt index c1f8826b4..5a01eae76 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt @@ -50,11 +50,7 @@ class DungeonHideItems { private fun isSkeletonSkull(entity: EntityArmorStand): Boolean { val itemStack = entity.inventory[4] - if (itemStack != null && itemStack.cleanName() == "Skeleton Skull") { - return true - } - - return false + return itemStack != null && itemStack.cleanName() == "Skeleton Skull" } @SubscribeEvent @@ -241,4 +237,4 @@ class DungeonHideItems { event.move(3, "dungeon.hideHealerOrbs", "dungeon.objectHider.hideHealerOrbs") event.move(3, "dungeon.hideHealerFairy", "dungeon.objectHider.hideHealerFairy") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt index 69b06c0ce..fbf6a3850 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt @@ -83,10 +83,13 @@ class DungeonMilestonesDisplay { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return - SkyHanniMod.feature.dungeon.showMileStonesDisplayPos.renderString(color + display, posLabel = "Dungeon Milestone") + SkyHanniMod.feature.dungeon.showMileStonesDisplayPos.renderString( + color + display, + posLabel = "Dungeon Milestone" + ) } private fun isEnabled(): Boolean { return LorenzUtils.inDungeons && SkyHanniMod.feature.dungeon.showMilestonesDisplay } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonTeammateOutlines.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonTeammateOutlines.kt index de2ca07e2..445b9676f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonTeammateOutlines.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonTeammateOutlines.kt @@ -32,8 +32,8 @@ class DungeonTeammateOutlines { val colorFormat = FontRenderer.getFormatFromString(team.colorPrefix) return if (colorFormat.length >= 2) - Minecraft.getMinecraft().fontRendererObj.getColorCode(colorFormat[1]); + Minecraft.getMinecraft().fontRendererObj.getColorCode(colorFormat[1]) else null } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt index 8395b02da..d636f6810 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt @@ -37,8 +37,8 @@ object Year300RaffleEvent { } fun isEnabled() = config.enableActiveTimer && - Instant.now().isBefore(SkyBlockTime(301).toInstant()) && - LorenzUtils.inSkyBlock + Instant.now().isBefore(SkyBlockTime(301).toInstant()) && + LorenzUtils.inSkyBlock @SubscribeEvent @@ -70,4 +70,4 @@ object Year300RaffleEvent { Renderable.string("§eTime Left: ${timeLeft.format()}") ) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/BurrowType.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/BurrowType.kt index b7d589440..ac52c5617 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/BurrowType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/BurrowType.kt @@ -3,8 +3,8 @@ package at.hannibal2.skyhanni.features.event.diana import at.hannibal2.skyhanni.utils.LorenzColor enum class BurrowType(val text: String, val color: LorenzColor) { - START("§aStart",LorenzColor.GREEN), - MOB("§cMob",LorenzColor.RED), - TREASURE("§6Treasure",LorenzColor.GOLD), - UNKNOWN("§fUnknown?!",LorenzColor.WHITE), -} \ No newline at end of file + START("§aStart", LorenzColor.GREEN), + MOB("§cMob", LorenzColor.RED), + TREASURE("§6Treasure", LorenzColor.GOLD), + UNKNOWN("§fUnknown?!", LorenzColor.WHITE), +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaAPI.kt index a9806ab2f..8c01d0141 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaAPI.kt @@ -15,7 +15,7 @@ object DianaAPI { fun hasSpadeInHand() = InventoryUtils.itemInHandId == spade private fun isRitualActive() = MayorElection.isPerkActive("Diana", "Mythological Ritual") || - MayorElection.isPerkActive("Jerry", "Perkpocalypse") || SkyHanniMod.feature.event.diana.alwaysDiana + MayorElection.isPerkActive("Jerry", "Perkpocalypse") || SkyHanniMod.feature.event.diana.alwaysDiana fun hasGriffinPet() = PetAPI.currentPet?.contains("Griffin") ?: false diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt index a684e7bac..423bdaed1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt @@ -17,7 +17,14 @@ enum class CropType( WHEAT("Wheat", "THEORETICAL_HOE_WHEAT", "CROPIE", 1.0, { ItemStack(Items.wheat) }), CARROT("Carrot", "THEORETICAL_HOE_CARROT", "CROPIE", 3.0, { ItemStack(Items.carrot) }, replenish = true), POTATO("Potato", "THEORETICAL_HOE_POTATO", "CROPIE", 3.0, { ItemStack(Items.potato) }, replenish = true), - NETHER_WART("Nether Wart", "THEORETICAL_HOE_WARTS", "FERMENTO", 2.5, { ItemStack(Items.nether_wart) }, replenish = true), + NETHER_WART( + "Nether Wart", + "THEORETICAL_HOE_WARTS", + "FERMENTO", + 2.5, + { ItemStack(Items.nether_wart) }, + replenish = true + ), PUMPKIN("Pumpkin", "PUMPKIN_DICER", "SQUASH", 1.0, { ItemStack(Blocks.pumpkin) }), MELON("Melon", "MELON_DICER", "SQUASH", 5.0, { ItemStack(Items.melon) }), COCOA_BEANS( @@ -69,4 +76,4 @@ enum class CropType( } } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt index 75fd7e9d2..8998903d5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt @@ -156,7 +156,7 @@ object GardenAPI { } fun hideExtraGuis() = ComposterOverlay.inInventory || AnitaMedalProfit.inInventory || - SkyMartCopperPrice.inInventory || FarmingContestAPI.inInventory || VisitorAPI.inInventory || FFGuideGUI.isInGui() + SkyMartCopperPrice.inInventory || FarmingContestAPI.inInventory || VisitorAPI.inInventory || FFGuideGUI.isInGui() fun clearCropSpeed() { storage?.cropsPerSecond?.clear() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt index ef5d9a429..c058e9fe6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt @@ -326,7 +326,7 @@ object GardenNextJacobContest { SkyHanniMod.coroutineScope.launch { openPopupWindow( "Farming Contest soon!\n" + - "Crops: ${cropText.removeColor()}" + "Crops: ${cropText.removeColor()}" ) } } @@ -395,7 +395,7 @@ object GardenNextJacobContest { } private fun isEnabled() = LorenzUtils.inSkyBlock && config.display - && (GardenAPI.inGarden() || config.everywhere) + && (GardenAPI.inGarden() || config.everywhere) private fun isFetchEnabled() = isEnabled() && config.fetchAutomatically private fun isSendEnabled() = isFetchEnabled() && config.shareAutomatically != 2 // 2 = Disabled diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt index 299e02f40..50efa9e42 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterAPI.kt @@ -11,13 +11,15 @@ object ComposterAPI { var tabListData = mapOf() val composterUpgrades: MutableMap? get() = GardenAPI.storage?.composterUpgrades - fun ComposterUpgrade.getLevel(addOne: ComposterUpgrade?) = (composterUpgrades?.get(this) ?: 0) + if (addOne == this) 1 else 0 + fun ComposterUpgrade.getLevel(addOne: ComposterUpgrade?) = + (composterUpgrades?.get(this) ?: 0) + if (addOne == this) 1 else 0 fun getFuel() = tabListData[ComposterDisplay.DataType.FUEL]?.removeColor()?.formatNumber() ?: 0 fun getOrganicMatter() = tabListData[ComposterDisplay.DataType.ORGANIC_MATTER]?.removeColor()?.formatNumber() ?: 0 - fun maxOrganicMatter(addOne: ComposterUpgrade?) = 40_000 + ComposterUpgrade.ORGANIC_MATTER_CAP.getLevel(addOne) * 20_000 + fun maxOrganicMatter(addOne: ComposterUpgrade?) = + 40_000 + ComposterUpgrade.ORGANIC_MATTER_CAP.getLevel(addOne) * 20_000 fun multiDropChance(addOne: ComposterUpgrade?) = ComposterUpgrade.MULTI_DROP.getLevel(addOne) * 0.03 diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt index 25cfd12d7..e7af728cc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt @@ -144,7 +144,11 @@ class JacobFarmingContestsInventory { @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.move(3, "inventory.jacobFarmingContestHighlightRewards", "inventory.jacobFarmingContests.highlightRewards") + event.move( + 3, + "inventory.jacobFarmingContestHighlightRewards", + "inventory.jacobFarmingContests.highlightRewards" + ) event.move(3, "inventory.jacobFarmingContestHideDuplicates", "inventory.jacobFarmingContests.hideDuplicates") event.move(3, "inventory.jacobFarmingContestRealTime", "inventory.jacobFarmingContests.realTime") event.move(3, "inventory.jacobFarmingContestFinneganIcon", "inventory.jacobFarmingContests.finneganIcon") diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt index b63b02f27..b780bbc0e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/CropMoneyDisplay.kt @@ -276,8 +276,8 @@ object CropMoneyDisplay { val onlyNpcPrice = (!config.useCustomFormat && LorenzUtils.noTradeMode) || - (config.useCustomFormat && config.customFormat.size == 1 && - config.customFormat[0] == 2) + (config.useCustomFormat && config.customFormat.size == 1 && + config.customFormat[0] == 2) for ((internalName, amount) in multipliers.moveEntryToTop { isSeeds(it.key) }) { val crop = cropNames[internalName]!! diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/CropPage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/CropPage.kt index cb20cc86a..d9558cd2f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/CropPage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/CropPage.kt @@ -1,4 +1,5 @@ package at.hannibal2.skyhanni.features.garden.fortuneguide.pages + import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI.Companion.getItem import at.hannibal2.skyhanni.features.garden.fortuneguide.FFStats @@ -7,12 +8,19 @@ import at.hannibal2.skyhanni.features.garden.fortuneguide.FortuneStats import at.hannibal2.skyhanni.utils.GuiRenderUtils import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase -class CropPage: FFGuideGUI.FFGuidePage() { +class CropPage : FFGuideGUI.FFGuidePage() { override fun drawPage(mouseX: Int, mouseY: Int, partialTicks: Float) { for (item in FarmingItems.entries) { if (item.name == FFGuideGUI.currentCrop?.name) { - GuiRenderUtils.renderItemAndTip(FFGuideGUI.tooltipToDisplay, item.getItem(), FFGuideGUI.guiLeft + 172, FFGuideGUI.guiTop + 60, mouseX, mouseY) + GuiRenderUtils.renderItemAndTip( + FFGuideGUI.tooltipToDisplay, + item.getItem(), + FFGuideGUI.guiLeft + 172, + FFGuideGUI.guiTop + 60, + mouseX, + mouseY + ) } } @@ -21,9 +29,12 @@ class CropPage: FFGuideGUI.FFGuidePage() { var i = 0 FFStats.cropPage.forEach { (key, value) -> if (key == FortuneStats.CROP_TOTAL) { - val newLine = key.label.replace("Crop", FFGuideGUI.currentCrop?.name?.replace("_", " ")?.firstLetterUppercase()!!) - GuiRenderUtils.drawFarmingBar(newLine, key.tooltip, value.first, value.second, FFGuideGUI.guiLeft + 135, - FFGuideGUI.guiTop + 5, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + val newLine = + key.label.replace("Crop", FFGuideGUI.currentCrop?.name?.replace("_", " ")?.firstLetterUppercase()!!) + GuiRenderUtils.drawFarmingBar( + newLine, key.tooltip, value.first, value.second, FFGuideGUI.guiLeft + 135, + FFGuideGUI.guiTop + 5, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) } else { if (i % 2 == 0) { x = FFGuideGUI.guiLeft + 15 @@ -31,10 +42,12 @@ class CropPage: FFGuideGUI.FFGuidePage() { } else { x = FFGuideGUI.guiLeft + 255 } - i ++ - GuiRenderUtils.drawFarmingBar(key.label, key.tooltip, value.first, value.second, x, y, - 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + i++ + GuiRenderUtils.drawFarmingBar( + key.label, key.tooltip, value.first, value.second, x, y, + 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) } } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt index 44beaca34..2fe623c74 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt @@ -11,37 +11,49 @@ import at.hannibal2.skyhanni.features.garden.fortuneguide.FarmingItems import at.hannibal2.skyhanni.utils.GuiRenderUtils import at.hannibal2.skyhanni.utils.TimeUtils -class OverviewPage: FFGuideGUI.FFGuidePage() { +class OverviewPage : FFGuideGUI.FFGuidePage() { private var equipmentFF = mutableMapOf() private var armorFF = mutableMapOf() override fun drawPage(mouseX: Int, mouseY: Int, partialTicks: Float) { val timeUntilCakes = TimeUtils.formatDuration(FFStats.cakeExpireTime - System.currentTimeMillis()) - GuiRenderUtils.drawFarmingBar("§6Universal Farming Fortune", + GuiRenderUtils.drawFarmingBar( + "§6Universal Farming Fortune", "§7§2Farming fortune in that is\n§2applied to every crop\n§eNot the same as tab FF\n" + - "§eSee on the grass block page", FFStats.totalBaseFF[FFTypes.TOTAL] ?: 0, 1277, - FFGuideGUI.guiLeft + 15, FFGuideGUI.guiTop + 5, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + "§eSee on the grass block page", FFStats.totalBaseFF[FFTypes.TOTAL] ?: 0, 1277, + FFGuideGUI.guiLeft + 15, FFGuideGUI.guiTop + 5, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) var line = if (FFStats.baseFF[FFTypes.ANITA]!! < 0.0) "§cAnita buff not saved\n§eVisit Anita to set it!" else "§7§2Fortune for levelling your Anita extra crops\n§2You get 4☘ per buff level" - GuiRenderUtils.drawFarmingBar("§2Anita Buff", line, FFStats.baseFF[FFTypes.ANITA] ?: 0.0, 60, FFGuideGUI.guiLeft + 15, - FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + GuiRenderUtils.drawFarmingBar( + "§2Anita Buff", line, FFStats.baseFF[FFTypes.ANITA] ?: 0.0, 60, FFGuideGUI.guiLeft + 15, + FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = if (FFStats.baseFF[FFTypes.FARMING_LVL]!! < 0.0) "§cFarming level not saved\n§eOpen /skills to set it!" else "§7§2Fortune for levelling your farming skill\n§2You get 4☘ per farming level" - GuiRenderUtils.drawFarmingBar("§2Farming Level", line, FFStats.baseFF[FFTypes.FARMING_LVL] ?: 0.0, 240, FFGuideGUI.guiLeft + 15, - FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + GuiRenderUtils.drawFarmingBar( + "§2Farming Level", line, FFStats.baseFF[FFTypes.FARMING_LVL] ?: 0.0, 240, FFGuideGUI.guiLeft + 15, + FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) - line = if (FFStats.baseFF[FFTypes.COMMUNITY_SHOP]!! < 0.0) "§cCommunity upgrade level not saved\n§eVisit Elizabeth to set it!" - else "§7§2Fortune for community shop upgrades\n§2You get 4☘ per upgrade tier" - GuiRenderUtils.drawFarmingBar("§2Community upgrades", line, FFStats.baseFF[FFTypes.COMMUNITY_SHOP] ?: 0.0, - 40, FFGuideGUI.guiLeft + 15, FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + line = + if (FFStats.baseFF[FFTypes.COMMUNITY_SHOP]!! < 0.0) "§cCommunity upgrade level not saved\n§eVisit Elizabeth to set it!" + else "§7§2Fortune for community shop upgrades\n§2You get 4☘ per upgrade tier" + GuiRenderUtils.drawFarmingBar( + "§2Community upgrades", line, FFStats.baseFF[FFTypes.COMMUNITY_SHOP] ?: 0.0, + 40, FFGuideGUI.guiLeft + 15, FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) - line = if (FFStats.baseFF[FFTypes.PLOTS]!! < 0.0) "§cUnlocked plot count not saved\n§eOpen /desk and view your plots to set it!" - else "§7§2Fortune for unlocking garden plots\n§2You get 3☘ per plot unlocked" - GuiRenderUtils.drawFarmingBar("§2Garden Plots", line, FFStats.baseFF[FFTypes.PLOTS] ?: 0.0, 72, FFGuideGUI.guiLeft + 15, - FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + line = + if (FFStats.baseFF[FFTypes.PLOTS]!! < 0.0) "§cUnlocked plot count not saved\n§eOpen /desk and view your plots to set it!" + else "§7§2Fortune for unlocking garden plots\n§2You get 3☘ per plot unlocked" + GuiRenderUtils.drawFarmingBar( + "§2Garden Plots", line, FFStats.baseFF[FFTypes.PLOTS] ?: 0.0, 72, FFGuideGUI.guiLeft + 15, + FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = when (FFStats.cakeExpireTime) { -1L -> "§eYou have not eaten a cake since\n§edownloading this update, assuming the\n§ebuff is active!" @@ -50,8 +62,10 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { if (FFStats.cakeExpireTime - System.currentTimeMillis() < 0 && FFStats.cakeExpireTime != -1L) { line = "§cYour cake buff has run out\nGo eat some cake!" } - GuiRenderUtils.drawFarmingBar("§2Cake Buff", line, FFStats.baseFF[FFTypes.CAKE] ?: 0.0, 5, FFGuideGUI.guiLeft + 15, - FFGuideGUI.guiTop + 130, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + GuiRenderUtils.drawFarmingBar( + "§2Cake Buff", line, FFStats.baseFF[FFTypes.CAKE] ?: 0.0, 5, FFGuideGUI.guiLeft + 15, + FFGuideGUI.guiTop + 130, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) val armorItem = when (currentArmor) { 1 -> FarmingItems.HELMET @@ -87,8 +101,10 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { else -> 78.75 } } - GuiRenderUtils.drawFarmingBar("§2Total $word Fortune", line, armorFF[FFTypes.TOTAL] ?: 0, value, - FFGuideGUI.guiLeft + 135, FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + GuiRenderUtils.drawFarmingBar( + "§2Total $word Fortune", line, armorFF[FFTypes.TOTAL] ?: 0, value, + FFGuideGUI.guiLeft + 135, FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = if (currentArmor == 0) "§7§2The base fortune from your armor\n§2Select a piece for more info" else "§7§2Base fortune from your\n${armorItem.getItem().displayName}" @@ -99,9 +115,11 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { 3 -> 35 else -> if (FFStats.usingSpeedBoots) 60 else 30 } - GuiRenderUtils.drawFarmingBar("§2Base $word Fortune", line, armorFF[FFTypes.BASE] ?: 0, + GuiRenderUtils.drawFarmingBar( + "§2Base $word Fortune", line, armorFF[FFTypes.BASE] ?: 0, value, FFGuideGUI.guiLeft + 135, - FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = if (currentArmor == 0) "§7§2The fortune from your armor's ability\n§2Select a piece for more info" else "§7§2Ability fortune from your\n${armorItem.getItem().displayName}" @@ -118,9 +136,11 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { } } - GuiRenderUtils.drawFarmingBar("§2$word Ability", line, armorFF[FFTypes.ABILITY] ?: 0, + GuiRenderUtils.drawFarmingBar( + "§2$word Ability", line, armorFF[FFTypes.ABILITY] ?: 0, value, FFGuideGUI.guiLeft + 135, - FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = if (currentArmor == 0) "§7§2The fortune from your armor's reforge\n§2Select a piece for more info" else "§7§2Total fortune from your\n${armorItem.getItem().displayName}" @@ -129,9 +149,11 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { } else if (currentArmor == 4) { if (FFStats.usingSpeedBoots) 25 else 30 } else 30 - GuiRenderUtils.drawFarmingBar("§2$word Reforge", line, armorFF[FFTypes.REFORGE] ?: 0, + GuiRenderUtils.drawFarmingBar( + "§2$word Reforge", line, armorFF[FFTypes.REFORGE] ?: 0, value, FFGuideGUI.guiLeft + 135, - FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) var currentPet = FFStats.rabbitFF var petMaxFF = 60 @@ -140,20 +162,25 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { currentPet = FFStats.elephantFF petMaxFF = 210 } + FarmingItems.MOOSHROOM_COW -> { currentPet = FFStats.mooshroomFF petMaxFF = 217 } + FarmingItems.BEE -> { currentPet = FFStats.beeFF petMaxFF = 90 } + else -> {} } - GuiRenderUtils.drawFarmingBar("§2Total Pet Fortune", "§7§2The total fortune from your pet and its item", + GuiRenderUtils.drawFarmingBar( + "§2Total Pet Fortune", "§7§2The total fortune from your pet and its item", currentPet[FFTypes.TOTAL] ?: 0, petMaxFF, FFGuideGUI.guiLeft + 105, - FFGuideGUI.guiTop + 155, 70, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiTop + 155, 70, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = when (FFStats.currentPetItem) { "GREEN_BANDANA" -> "§7§2The fortune from your pet's item\n§2Grants 4☘ per garden level" @@ -161,8 +188,10 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { "MINOS_RELIC" -> "§cGreen Bandana is better for fortune than minos relic!" else -> "No fortune boosting pet item" } - GuiRenderUtils.drawFarmingBar("§2Pet Item", line, currentPet[FFTypes.PET_ITEM] ?: 0, 60, FFGuideGUI.guiLeft + 185, - FFGuideGUI.guiTop + 155, 70, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + GuiRenderUtils.drawFarmingBar( + "§2Pet Item", line, currentPet[FFTypes.PET_ITEM] ?: 0, 60, FFGuideGUI.guiLeft + 185, + FFGuideGUI.guiTop + 155, 70, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) word = if (currentEquipment == 0) "Equipment" else "Piece" @@ -183,33 +212,46 @@ class OverviewPage: FFGuideGUI.FFGuidePage() { line = if (currentEquipment == 0) "§7§2Total fortune from all your equipment\n§2Select a piece for more info" else "§7§2Total fortune from your\n${equipmentItem.getItem().displayName}" - GuiRenderUtils.drawFarmingBar("§2Total $word Fortune", line, equipmentFF[FFTypes.TOTAL] ?: 0, + GuiRenderUtils.drawFarmingBar( + "§2Total $word Fortune", line, equipmentFF[FFTypes.TOTAL] ?: 0, if (currentEquipment == 0) 218 else 54.5, - FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 30, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) line = if (currentEquipment == 0) "§7§2The base fortune from all your equipment\n§2Select a piece for more info" else "§7§2Total base fortune from your\n${equipmentItem.getItem().displayName}" - GuiRenderUtils.drawFarmingBar("§2$word Base Fortune", line, equipmentFF[FFTypes.BASE] ?: 0, + GuiRenderUtils.drawFarmingBar( + "§2$word Base Fortune", line, equipmentFF[FFTypes.BASE] ?: 0, if (currentEquipment == 0) 20 else 5, - FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 55, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) - line = if (currentEquipment == 0) "§7§2The fortune from all of your equipment's abilities\n§2Select a piece for more info" - else "§7§2Total ability fortune from your\n${equipmentItem.getItem().displayName}" - GuiRenderUtils.drawFarmingBar("§2$word Ability", line, equipmentFF[FFTypes.ABILITY] ?: 0, + line = + if (currentEquipment == 0) "§7§2The fortune from all of your equipment's abilities\n§2Select a piece for more info" + else "§7§2Total ability fortune from your\n${equipmentItem.getItem().displayName}" + GuiRenderUtils.drawFarmingBar( + "§2$word Ability", line, equipmentFF[FFTypes.ABILITY] ?: 0, if (currentEquipment == 0) 60 else 15, - FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 80, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) - line = if (currentEquipment == 0) "§7§2The fortune from all of your equipment's reforges\n§2Select a piece for more info" - else "§7§2Total reforge fortune from your\n${equipmentItem.getItem().displayName}" - GuiRenderUtils.drawFarmingBar("§2$word Reforge", line, equipmentFF[FFTypes.REFORGE] ?: 0, + line = + if (currentEquipment == 0) "§7§2The fortune from all of your equipment's reforges\n§2Select a piece for more info" + else "§7§2Total reforge fortune from your\n${equipmentItem.getItem().displayName}" + GuiRenderUtils.drawFarmingBar( + "§2$word Reforge", line, equipmentFF[FFTypes.REFORGE] ?: 0, if (currentEquipment == 0) 60 else 15, - FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 105, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) val maxGreenThumbFortune = GardenAPI.totalAmountVisitorsExisting.toDouble() / 4 - line = if (currentEquipment == 0) "§7§2The fortune from all of your equipment's enchantments\n§2Select a piece for more info" - else "§7§2Total enchantment fortune from your\n${equipmentItem.getItem().displayName}" - GuiRenderUtils.drawFarmingBar("§2$word Enchantment", line, equipmentFF[FFTypes.GREEN_THUMB] ?: 0, + line = + if (currentEquipment == 0) "§7§2The fortune from all of your equipment's enchantments\n§2Select a piece for more info" + else "§7§2Total enchantment fortune from your\n${equipmentItem.getItem().displayName}" + GuiRenderUtils.drawFarmingBar( + "§2$word Enchantment", line, equipmentFF[FFTypes.GREEN_THUMB] ?: 0, if (currentEquipment == 0) maxGreenThumbFortune * 4 else maxGreenThumbFortune, - FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 130, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay) + FFGuideGUI.guiLeft + 255, FFGuideGUI.guiTop + 130, 90, mouseX, mouseY, FFGuideGUI.tooltipToDisplay + ) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt index 6076efd21..70bc23125 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt @@ -11,7 +11,7 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraft.util.MathHelper import java.text.DecimalFormat -class UpgradePage: FFGuideGUI.FFGuidePage() { +class UpgradePage : FFGuideGUI.FFGuidePage() { private var pageScroll = 0 private var scrollVelocity = 0.0 private val maxNoInputFrames = 100 @@ -22,13 +22,34 @@ class UpgradePage: FFGuideGUI.FFGuidePage() { val inverseScale = 1 / 0.75f GlStateManager.scale(0.75f, 0.75f, 1f) - GuiRenderUtils.drawString("Upgrade", (FFGuideGUI.guiLeft + 45) * inverseScale, (FFGuideGUI.guiTop + 5) * inverseScale) - GuiRenderUtils.drawString("Item", (FFGuideGUI.guiLeft + 190) * inverseScale, (FFGuideGUI.guiTop + 5) * inverseScale) - GuiRenderUtils.drawString("FF increase", (FFGuideGUI.guiLeft + 240) * inverseScale, (FFGuideGUI.guiTop + 5) * inverseScale) - GuiRenderUtils.drawString("Cost/FF", (FFGuideGUI.guiLeft + 290) * inverseScale, (FFGuideGUI.guiTop + 5) * inverseScale) - GuiRenderUtils.drawString("Total", (FFGuideGUI.guiLeft + 330) * inverseScale, (FFGuideGUI.guiTop + 5) * inverseScale) + GuiRenderUtils.drawString( + "Upgrade", + (FFGuideGUI.guiLeft + 45) * inverseScale, + (FFGuideGUI.guiTop + 5) * inverseScale + ) + GuiRenderUtils.drawString( + "Item", + (FFGuideGUI.guiLeft + 190) * inverseScale, + (FFGuideGUI.guiTop + 5) * inverseScale + ) + GuiRenderUtils.drawString( + "FF increase", + (FFGuideGUI.guiLeft + 240) * inverseScale, + (FFGuideGUI.guiTop + 5) * inverseScale + ) + GuiRenderUtils.drawString( + "Cost/FF", + (FFGuideGUI.guiLeft + 290) * inverseScale, + (FFGuideGUI.guiTop + 5) * inverseScale + ) + GuiRenderUtils.drawString( + "Total", + (FFGuideGUI.guiLeft + 330) * inverseScale, + (FFGuideGUI.guiTop + 5) * inverseScale + ) - val upgradeList = if (FFGuideGUI.currentCrop == null) FortuneUpgrades.genericUpgrades else FortuneUpgrades.cropSpecificUpgrades + val upgradeList = + if (FFGuideGUI.currentCrop == null) FortuneUpgrades.genericUpgrades else FortuneUpgrades.cropSpecificUpgrades listLength = upgradeList.size for ((index, upgrade) in upgradeList.withIndex()) { if (adjustedY + 25 * index < FFGuideGUI.guiTop + 20) continue @@ -42,13 +63,40 @@ class UpgradePage: FFGuideGUI.FFGuidePage() { if (upgrade.itemQuantity != 1) { formattedUpgrade = "$formattedUpgrade §fx${upgrade.itemQuantity}" } - GuiRenderUtils.drawTwoLineString(upgrade.description, (FFGuideGUI.guiLeft + 15) * inverseScale, (adjustedY + 25 * index) * inverseScale) - GuiRenderUtils.renderItemAndTip(FFGuideGUI.tooltipToDisplay, upgradeItem, (FFGuideGUI.guiLeft + 155) * inverseScale, (adjustedY + 25 * index - 5) * inverseScale, - mouseX * inverseScale, mouseY * inverseScale, 0x00FFFFFF) - GuiRenderUtils.drawString(formattedUpgrade, (FFGuideGUI.guiLeft + 180) * inverseScale, (adjustedY + 25 * index) * inverseScale) - GuiRenderUtils.drawString("§a${DecimalFormat("0.##").format(upgrade.fortuneIncrease)}", (FFGuideGUI.guiLeft + 270) * inverseScale, (adjustedY + 25 * index) * inverseScale) - GuiRenderUtils.drawString("§6" + upgrade.costPerFF?.let { NumberUtil.format(it) }, (FFGuideGUI.guiLeft + 300) * inverseScale, (adjustedY + 25 * index) * inverseScale) - GuiRenderUtils.drawString(("§6" + upgrade.cost?.let { NumberUtil.format(it) }), (FFGuideGUI.guiLeft + 335) * inverseScale, (adjustedY + 25 * index) * inverseScale) + GuiRenderUtils.drawTwoLineString( + upgrade.description, + (FFGuideGUI.guiLeft + 15) * inverseScale, + (adjustedY + 25 * index) * inverseScale + ) + GuiRenderUtils.renderItemAndTip( + FFGuideGUI.tooltipToDisplay, + upgradeItem, + (FFGuideGUI.guiLeft + 155) * inverseScale, + (adjustedY + 25 * index - 5) * inverseScale, + mouseX * inverseScale, + mouseY * inverseScale, + 0x00FFFFFF + ) + GuiRenderUtils.drawString( + formattedUpgrade, + (FFGuideGUI.guiLeft + 180) * inverseScale, + (adjustedY + 25 * index) * inverseScale + ) + GuiRenderUtils.drawString( + "§a${DecimalFormat("0.##").format(upgrade.fortuneIncrease)}", + (FFGuideGUI.guiLeft + 270) * inverseScale, + (adjustedY + 25 * index) * inverseScale + ) + GuiRenderUtils.drawString( + "§6" + upgrade.costPerFF?.let { NumberUtil.format(it) }, + (FFGuideGUI.guiLeft + 300) * inverseScale, + (adjustedY + 25 * index) * inverseScale + ) + GuiRenderUtils.drawString( + ("§6" + upgrade.cost?.let { NumberUtil.format(it) }), + (FFGuideGUI.guiLeft + 335) * inverseScale, + (adjustedY + 25 * index) * inverseScale + ) } GlStateManager.scale(inverseScale, inverseScale, 1f) scrollScreen() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorTooltipParser.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorTooltipParser.kt index 510e4f3b7..851c5ece7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorTooltipParser.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorTooltipParser.kt @@ -36,7 +36,7 @@ class VisitorTooltipParser { } } - return parsedData; + return parsedData } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt index 9b46318de..94726c640 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt @@ -93,5 +93,5 @@ class HighlightMiningCommissionMobs { } fun isEnabled() = config.highlightCommissionMobs && - (IslandType.DWARVEN_MINES.isInIsland() || IslandType.CRYSTAL_HOLLOWS.isInIsland()) + (IslandType.DWARVEN_MINES.isInIsland() || IslandType.CRYSTAL_HOLLOWS.isInIsland()) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/CollectionTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/CollectionTracker.kt index 1ddcb40e7..e05571b6a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/CollectionTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/CollectionTracker.kt @@ -170,7 +170,7 @@ class CollectionTracker { val currentlyInInventory = countCurrentlyInInventory() val diff = currentlyInInventory - lastAmountInInventory if (diff != 0 && diff > 0) { - gainItems(diff) + gainItems(diff) } lastAmountInInventory = currentlyInInventory diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt index 0d164b477..3b52ee478 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt @@ -11,7 +11,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent /** * I need these features in my dev env - */ + */ class MiscFeatures { @SubscribeEvent @@ -32,6 +32,7 @@ class MiscFeatures { EnumParticleTypes.EXPLOSION_HUGE, EnumParticleTypes.EXPLOSION_NORMAL, -> event.isCanceled = true + else -> {} } } @@ -50,4 +51,4 @@ class MiscFeatures { fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(2, "mobs", "combat.mobs") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt index f4ce726f4..80c3b870d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt @@ -58,6 +58,7 @@ class NonGodPotEffectDisplay { GREAT_SPOOK("§fGreat Spook I", inventoryItemName = "§fGreat Spook Potion"), ; } + // TODO USE SH-REPO private var patternEffectsCount = "§7You have §e(?\\d+) §7non-god effects\\.".toPattern() private var totalEffectsCount = 0 diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt index c3d45ccee..2f47b3db1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt @@ -72,13 +72,16 @@ class PlayerChatSymbols { if (!component.text_skyhanni().contains(rankAndName)) return false val oldText = component.text_skyhanni() - component.setText_skyhanni(component.text_skyhanni().replace(oldText, getNewText(emblemText, oldText, rankAndName))) + component.setText_skyhanni( + component.text_skyhanni().replace(oldText, getNewText(emblemText, oldText, rankAndName)) + ) return true } - private fun getNewText(emblemText: String, oldText: String, rankAndName: String): String = when (config.symbolLocation) { - 0 -> oldText.replace(rankAndName, "$emblemText $rankAndName") - 1 -> oldText.replace(rankAndName, "$rankAndName $emblemText ") - else -> oldText - } -} \ No newline at end of file + private fun getNewText(emblemText: String, oldText: String, rankAndName: String): String = + when (config.symbolLocation) { + 0 -> oldText.replace(rankAndName, "$emblemText $rankAndName") + 1 -> oldText.replace(rankAndName, "$rankAndName $emblemText ") + else -> oldText + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/SuperpairsClicksAlert.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/SuperpairsClicksAlert.kt index f4da6126b..6ca018c9f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/SuperpairsClicksAlert.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/SuperpairsClicksAlert.kt @@ -43,12 +43,12 @@ class SuperpairsClicksAlert { if ( // checks if we have succeeded in either minigame (event.inventoryName.contains("Chronomatron") - && ((event.inventoryItems[4]?.displayName?.removeColor() + && ((event.inventoryItems[4]?.displayName?.removeColor() ?.let { currentRoundRegex.find(it) } ?.groups?.get(1)?.value?.toInt() ?: -1) > roundsNeeded)) || (event.inventoryName.contains("Ultrasequencer") - && event.inventoryItems.entries + && event.inventoryItems.entries .filter { it.key < 45 } .any { it.value.stackSize > roundsNeeded }) ) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/TimeFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/TimeFeatures.kt index bcee7863f..4298edf21 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/TimeFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/TimeFeatures.kt @@ -32,7 +32,8 @@ class TimeFeatures { if (!LorenzUtils.inSkyBlock) return if (config.realTime) { - val currentTime = (if (config.realTimeFormatToggle) timeFormat12h else timeFormat24h).format(System.currentTimeMillis()) + val currentTime = + (if (config.realTimeFormatToggle) timeFormat12h else timeFormat24h).format(System.currentTimeMillis()) config.realTimePosition.renderString(currentTime, posLabel = "Real Time") } @@ -56,4 +57,4 @@ class TimeFeatures { event.move(2, "misc.timeConfigs.realTime", "gui.realTime") event.move(2, "misc.timeConfigs.realTimePos", "gui.realTimePosition") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt index 3f7f537ed..a81205ce7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt @@ -13,6 +13,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent // heavily inspired by SBA code object TabListReader { private val config get() = SkyHanniMod.feature.misc.compactTabList + // TODO USE SH-REPO var hypixelAdvertisingString = "HYPIXEL.NET" private val godPotPattern = "You have a God Potion active! (?[\\w ]+)".toPattern() @@ -221,4 +222,4 @@ object TabListReader { } } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt index e95132ff7..780ed54c7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt @@ -371,7 +371,9 @@ enum class DiscordStatus(private val displayMessageSupplier: Supplier?) }), AFK({ - if (beenAfkFor.passedSince() > 5.minutes) "AFK for ${beenAfkFor.passedSince().format(maxUnits = 1, longName = true)}" + if (beenAfkFor.passedSince() > 5.minutes) "AFK for ${ + beenAfkFor.passedSince().format(maxUnits = 1, longName = true) + }" else AutoStatus.AFK.placeholderText }) ; diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt index 6127266d9..7586805df 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt @@ -232,7 +232,8 @@ object TrevorFeatures { location = LorenzVec(location.x, TrevorSolver.averageHeight, location.z) } if (TrevorSolver.mobLocation == CurrentMobArea.FOUND) { - val displayName = if (TrevorSolver.currentMob == null) "Mob Location" else TrevorSolver.currentMob!!.mobName + val displayName = + if (TrevorSolver.currentMob == null) "Mob Location" else TrevorSolver.currentMob!!.mobName location = TrevorSolver.mobCoordinates event.drawWaypointFilled(location.add(0, -2, 0), LorenzColor.GREEN.toColor(), true, true) event.drawDynamicText(location.add(0, 1, 0), displayName, 1.5) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt index f2e36db59..86f917d35 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt @@ -17,7 +17,8 @@ object TrevorTracker { private val config get() = SkyHanniMod.feature.misc.trevorTheTrapper // TODO USE SH-REPO - private val selfKillMobPattern = "§aYour mob died randomly, you are rewarded §r§5(?.*) pelts§r§a.".toPattern() + private val selfKillMobPattern = + "§aYour mob died randomly, you are rewarded §r§5(?.*) pelts§r§a.".toPattern() private val killMobPattern = "§aKilling the animal rewarded you §r§5(?.*) pelts§r§a.".toPattern() private var display = emptyList>() @@ -78,7 +79,7 @@ object TrevorTracker { if (matcher.matches()) { val pelts = matcher.group("pelts").toInt() storage.peltsGained += pelts - storage.selfKillingAnimals += 1 + storage.selfKillingAnimals += 1 saveAndUpdate() } matcher = killMobPattern.matcher(event.message) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt index 9d68aebde..b3539c131 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt @@ -47,7 +47,7 @@ class GuiOptionEditorUpdateCheck(option: ProcessedOption) : GuiOptionEditor(opti val sameVersion = currentVersion.equals(nextVersion, true) TextRenderUtils.drawStringCenteredScaledMaxWidth( "${if (UpdateManager.updateState == UpdateManager.UpdateState.NONE) GREEN else RED}$currentVersion" + - if (nextVersion != null && !sameVersion) "➜ ${GREEN}${nextVersion}" else "", + if (nextVersion != null && !sameVersion) "➜ ${GREEN}${nextVersion}" else "", fr, widthRemaining / 4F, 10F, @@ -85,4 +85,4 @@ class GuiOptionEditorUpdateCheck(option: ProcessedOption) : GuiOptionEditor(opti override fun fulfillsSearch(word: String): Boolean { return super.fulfillsSearch(word) || word in "download" || word in "update" } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index 49c22b26d..b6a8feca2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -137,7 +137,11 @@ open class VisualWordGui : GuiScreen() { inBox = true } - drawUnmodifiedString("${index + 1}.", (guiLeft + 5) * inverseScale, (adjustedY + 10 + 30 * index) * inverseScale) + drawUnmodifiedString( + "${index + 1}.", + (guiLeft + 5) * inverseScale, + (adjustedY + 10 + 30 * index) * inverseScale + ) val top = adjustedY + 30 * index + 7 if (isPointInLastClicked(guiLeft + 335, top, 16, 16)) { @@ -167,7 +171,14 @@ open class VisualWordGui : GuiScreen() { } if (inBox) { - GuiRenderUtils.drawScaledRec(guiLeft, adjustedY + 30 * index, guiLeft + sizeX, adjustedY + 30 * index + 30, colorB, inverseScale) + GuiRenderUtils.drawScaledRec( + guiLeft, + adjustedY + 30 * index, + guiLeft + sizeX, + adjustedY + 30 * index + 30, + colorB, + inverseScale + ) } val statusBlock = if (phrase.enabled) { @@ -190,11 +201,27 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(scale, scale, 1f) if (inBox) { - drawUnmodifiedString(phrase.phrase, (guiLeft + 15) * inverseScale, (adjustedY + 5 + 30 * index) * inverseScale) - drawUnmodifiedString(phrase.replacement, (guiLeft + 15) * inverseScale, (adjustedY + 15 + 30 * index) * inverseScale) + drawUnmodifiedString( + phrase.phrase, + (guiLeft + 15) * inverseScale, + (adjustedY + 5 + 30 * index) * inverseScale + ) + drawUnmodifiedString( + phrase.replacement, + (guiLeft + 15) * inverseScale, + (adjustedY + 15 + 30 * index) * inverseScale + ) } else { - drawUnmodifiedString(phrase.phrase.convertToFormatted(), (guiLeft + 15) * inverseScale, (adjustedY + 5 + 30 * index) * inverseScale) - drawUnmodifiedString(phrase.replacement.convertToFormatted(), (guiLeft + 15) * inverseScale, (adjustedY + 15 + 30 * index) * inverseScale) + drawUnmodifiedString( + phrase.phrase.convertToFormatted(), + (guiLeft + 15) * inverseScale, + (adjustedY + 5 + 30 * index) * inverseScale + ) + drawUnmodifiedString( + phrase.replacement.convertToFormatted(), + (guiLeft + 15) * inverseScale, + (adjustedY + 15 + 30 * index) * inverseScale + ) } } @@ -256,17 +283,45 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(0.75f, 0.75f, 1f) - drawUnmodifiedString("§bThe top line of each section", (guiLeft + 10) * inverseScale, (guiTop + 12) * inverseScale) - drawUnmodifiedString("§bis the preview of the bottom text", (guiLeft + 10) * inverseScale, (guiTop + 22) * inverseScale) - - drawUnmodifiedString("§bTo get the Minecraft", (guiLeft + 220) * inverseScale, (guiTop + 12) * inverseScale) - drawUnmodifiedString("§b formatting character use \"&&\"", (guiLeft + 220) * inverseScale, (guiTop + 22) * inverseScale) - - drawUnmodifiedString(currentPhrase.phrase.convertToFormatted(), (guiLeft + 30) * inverseScale, (guiTop + 40) * inverseScale) + drawUnmodifiedString( + "§bThe top line of each section", + (guiLeft + 10) * inverseScale, + (guiTop + 12) * inverseScale + ) + drawUnmodifiedString( + "§bis the preview of the bottom text", + (guiLeft + 10) * inverseScale, + (guiTop + 22) * inverseScale + ) + + drawUnmodifiedString( + "§bTo get the Minecraft", + (guiLeft + 220) * inverseScale, + (guiTop + 12) * inverseScale + ) + drawUnmodifiedString( + "§b formatting character use \"&&\"", + (guiLeft + 220) * inverseScale, + (guiTop + 22) * inverseScale + ) + + drawUnmodifiedString( + currentPhrase.phrase.convertToFormatted(), + (guiLeft + 30) * inverseScale, + (guiTop + 40) * inverseScale + ) drawUnmodifiedString(currentPhrase.phrase, (guiLeft + 30) * inverseScale, (guiTop + 55) * inverseScale) - drawUnmodifiedString(currentPhrase.replacement.convertToFormatted(), (guiLeft + 30) * inverseScale, (guiTop + 95) * inverseScale) - drawUnmodifiedString(currentPhrase.replacement, (guiLeft + 30) * inverseScale, (guiTop + 110) * inverseScale) + drawUnmodifiedString( + currentPhrase.replacement.convertToFormatted(), + (guiLeft + 30) * inverseScale, + (guiTop + 95) * inverseScale + ) + drawUnmodifiedString( + currentPhrase.replacement, + (guiLeft + 30) * inverseScale, + (guiTop + 110) * inverseScale + ) GlStateManager.scale(inverseScale, inverseScale, 1f) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt index 74b94c0c9..8d7507e12 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangBlazingSouls.kt @@ -65,5 +65,5 @@ class AshfangBlazingSouls { } private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && - DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) -} \ No newline at end of file + DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt index 161df6a8c..5fd7a3b77 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangFreezeCooldown.kt @@ -51,6 +51,6 @@ class AshfangFreezeCooldown { private fun isEnabled(): Boolean { return LorenzUtils.inSkyBlock && config.freezeCooldown && - DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) + DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt index 68837bad4..5b3fc60de 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangGravityOrbs.kt @@ -23,7 +23,7 @@ class AshfangGravityOrbs { private val config get() = SkyHanniMod.feature.crimsonIsle.ashfang.gravityOrbs private val texture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV" + - "0L3RleHR1cmUvMWE2OWNjZjdhZDkwNGM5YTg1MmVhMmZmM2Y1YjRlMjNhZGViZjcyZWQxMmQ1ZjI0Yjc4Y2UyZDQ0YjRhMiJ9fX0=" + "0L3RleHR1cmUvMWE2OWNjZjdhZDkwNGM5YTg1MmVhMmZmM2Y1YjRlMjNhZGViZjcyZWQxMmQ1ZjI0Yjc4Y2UyZDQ0YjRhMiJ9fX0=" private val orbs = mutableListOf() @SubscribeEvent @@ -68,5 +68,5 @@ class AshfangGravityOrbs { } private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && - DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) -} \ No newline at end of file + DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt index 99351747f..157c260fa 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangHideDamageIndicator.kt @@ -28,5 +28,5 @@ class AshfangHideDamageIndicator { private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.crimsonIsle.ashfang.hide.damageSplash && - DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) -} \ No newline at end of file + DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangNextResetCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangNextResetCooldown.kt index 42d98cdbb..68c3d9382 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangNextResetCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/ashfang/AshfangNextResetCooldown.kt @@ -60,6 +60,6 @@ class AshfangNextResetCooldown { private fun isEnabled(): Boolean { return LorenzUtils.inSkyBlock && config.nextResetCooldown && - DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) + DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt index 39e888ade..a14da5859 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt @@ -46,8 +46,8 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH if (!message.contains("KUUDRA DOWN!") || message.contains(":")) return for (line in ScoreboardData.sidebarLines) { - if(line.contains("Kuudra's") && line.contains("Hollow") && line.contains("(")){ - val tier = line.substringAfter("(T").substring(0,1).toInt() + if (line.contains("Kuudra's") && line.contains("Hollow") && line.contains("(")) { + val tier = line.substringAfter("(T").substring(0, 1).toInt() val kuudraTier = getByTier(tier)!! finished(kuudraTier) return @@ -129,4 +129,4 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH private fun getByDisplayName(name: String) = kuudraTiers.firstOrNull { it.name == name } private fun getByTier(number: Int) = kuudraTiers.firstOrNull { it.tierNumber == number } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt index 10eae5816..be90eec14 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt @@ -57,11 +57,7 @@ class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHel private fun needMiniBossQuest(miniBoss: CrimsonMiniBoss): Boolean { val bossQuest = reputationHelper.questHelper.getQuest() - if (bossQuest != null && bossQuest.miniBoss == miniBoss && bossQuest.state == QuestState.ACCEPTED) { - return true - } - - return false + return bossQuest != null && bossQuest.miniBoss == miniBoss && bossQuest.state == QuestState.ACCEPTED } private fun finished(miniBoss: CrimsonMiniBoss) { @@ -123,4 +119,4 @@ class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHel } private fun getByDisplayName(name: String) = miniBosses.firstOrNull { it.displayName == name } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt index 507dc5953..780d8494c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt @@ -29,6 +29,8 @@ object RiftAPI { fun inLivingCave() = LorenzUtils.skyBlockArea == "Living Cave" fun inLivingStillness() = LorenzUtils.skyBlockArea == "Living Stillness" - fun inStillgoreChateau() = LorenzUtils.skyBlockArea == "Stillgore Château" || LorenzUtils.skyBlockArea == "Oubliette" + fun inStillgoreChateau() = + LorenzUtils.skyBlockArea == "Stillgore Château" || LorenzUtils.skyBlockArea == "Oubliette" + fun inDreadfarm() = LorenzUtils.skyBlockArea == "Dreadfarm" } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveDefenseBlocks.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveDefenseBlocks.kt index 1257f8db4..88b2939c8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveDefenseBlocks.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveDefenseBlocks.kt @@ -77,9 +77,9 @@ class LivingCaveDefenseBlocks { // read new entity data val compareLocation = event.location.add(-0.5, -1.5, -0.5) entity = EntityUtils.getEntitiesNearby(compareLocation, 2.0) - .filter { isCorrectMob(it.name) } - .filter { !it.isAtFullHealth() } - .minByOrNull { it.distanceTo(compareLocation) } + .filter { isCorrectMob(it.name) } + .filter { !it.isAtFullHealth() } + .minByOrNull { it.distanceTo(compareLocation) } } val defenseBlock = entity?.let { DefenseBlock(it, location) } ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt index cabc094db..cc237c6c5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt @@ -67,7 +67,11 @@ class LivingCaveLivingMetalHelper { val percentage = diff.toDouble() / maxTime a.slope(b, 1 - percentage) } else b - event.drawWaypointFilled(location, LorenzColor.AQUA.toColor(), seeThroughBlocks = location.distanceToPlayer() < 10) + event.drawWaypointFilled( + location, + LorenzColor.AQUA.toColor(), + seeThroughBlocks = location.distanceToPlayer() < 10 + ) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftHorsezookaHider.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftHorsezookaHider.kt index 04c4ba332..b908f49f8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftHorsezookaHider.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftHorsezookaHider.kt @@ -15,7 +15,7 @@ class RiftHorsezookaHider { if (!SkyHanniMod.feature.rift.horsezookaHider) return if (event.entity is EntityHorse && InventoryUtils.itemInHandId.equals("HORSEZOOKA")) { - event.isCanceled = true + event.isCanceled = true } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt index 966b8bdaa..b26fd4c09 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt @@ -116,7 +116,8 @@ class SlayerRngMeterDisplay { val storage = getStorage() ?: return - val selectedItem = event.inventoryItems.values.find { item -> item.getLore().any { it.contains("§a§lSELECTED") } } + val selectedItem = + event.inventoryItems.values.find { item -> item.getLore().any { it.contains("§a§lSELECTED") } } if (selectedItem == null) { storage.itemGoal = "" storage.goalNeeded = -1 diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt index 4d5d9fa34..a536398a7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt @@ -16,6 +16,5 @@ enum class SlayerType(val displayName: String, val clazz: Class<*>) { VAMPIRE("Riftstalker Bloodfiend", EntityOtherPlayerMP::class.java) ; - companion object { - } -} \ No newline at end of file + companion object +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerFirePitsWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerFirePitsWarning.kt index 4d1423880..74c15c271 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerFirePitsWarning.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerFirePitsWarning.kt @@ -51,6 +51,7 @@ class BlazeSlayerFirePitsWarning { -> { fireFirePits() } + else -> {} } } @@ -70,4 +71,4 @@ class BlazeSlayerFirePitsWarning { fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "slayer.firePitsWarning", "slayer.blazes.firePitsWarning") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningMobManager.kt b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningMobManager.kt index f2f0f874d..6b4757e21 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningMobManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningMobManager.kt @@ -88,7 +88,7 @@ class SummoningMobManager { healthPattern.matchMatcher(name) { val playerName = LorenzUtils.getPlayerName() if (name.contains(playerName)) { - summoningMobNametags.add(it as EntityArmorStand) + summoningMobNametags.add(it) if (summoningMobNametags.size == summoningsSpawned) { searchArmorStands = false } diff --git a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt index 8f0825188..602a610df 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt @@ -20,10 +20,10 @@ class SummoningSoulsName { private val texture = "ewogICJ0aW1lc3RhbXAiIDogMTYwMTQ3OTI2NjczMywKICAicHJvZmlsZUlkIiA6ICJmMzA1ZjA5NDI0NTg0ZjU" + - "4YmEyYjY0ZjAyZDcyNDYyYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJqcm9ja2EzMyIsCiAgInNpZ25hdH" + - "VyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgI" + - "nVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81YWY0MDM1ZWMwZGMx" + - "NjkxNzc4ZDVlOTU4NDAxNzAyMjdlYjllM2UyOTQzYmVhODUzOTI5Y2U5MjNjNTk4OWFkIgogICAgfQogIH0KfQ" + "4YmEyYjY0ZjAyZDcyNDYyYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJqcm9ja2EzMyIsCiAgInNpZ25hdH" + + "VyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgI" + + "nVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS81YWY0MDM1ZWMwZGMx" + + "NjkxNzc4ZDVlOTU4NDAxNzAyMjdlYjllM2UyOTQzYmVhODUzOTI5Y2U5MjNjNTk4OWFkIgogICAgfQogIH0KfQ" private val souls = mutableMapOf() private val mobsLastLocation = mutableMapOf() @@ -89,4 +89,4 @@ class SummoningSoulsName { } private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.combat.summonings.summoningSoulDisplay -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt index a2fc3ad76..8eadaa3e4 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt @@ -98,7 +98,7 @@ object FontRendererHook { } @JvmStatic - fun forceWhiteColorCode(i1: Int) : Int { + fun forceWhiteColorCode(i1: Int): Int { if (!LorenzUtils.inSkyBlock) return i1 if (!SkyHanniMod.feature.chroma.enabled) return i1 @@ -142,7 +142,14 @@ object FontRendererHook { } @JvmStatic - fun toggleChromaCondition_shouldResetStyles(text: String, shadow: Boolean, ci: CallbackInfo, i: Int, c0: Char, i1: Int): Boolean { + fun toggleChromaCondition_shouldResetStyles( + text: String, + shadow: Boolean, + ci: CallbackInfo, + i: Int, + c0: Char, + i1: Int + ): Boolean { if (!LorenzUtils.inSkyBlock) return false if (!SkyHanniMod.feature.chroma.enabled) return false if (i1 == 22) { @@ -151,4 +158,4 @@ object FontRendererHook { } return false } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinFontRenderer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinFontRenderer.java index 2b3d87c5c..b8a759ed0 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinFontRenderer.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinFontRenderer.java @@ -37,8 +37,8 @@ public abstract class MixinFontRenderer { * Inject call to {@link FontRendererHook#restoreChromaState()} after 1st and 3rd fontrenderer.italicStyle = ___ call */ @Inject(method = "renderStringAtPos", at = { - @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/gui/FontRenderer;italicStyle:Z", ordinal = 0, shift = At.Shift.AFTER), - @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/gui/FontRenderer;italicStyle:Z", ordinal = 2, shift = At.Shift.AFTER)}) + @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/gui/FontRenderer;italicStyle:Z", ordinal = 0, shift = At.Shift.AFTER), + @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/gui/FontRenderer;italicStyle:Z", ordinal = 2, shift = At.Shift.AFTER)}) public void insertRestoreChromaState(CallbackInfo ci) { FontRendererHook.restoreChromaState(); } diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java index ed106f6f1..57fd96a70 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java @@ -52,12 +52,12 @@ public abstract class MixinGuiContainer extends GuiScreen { } @Inject(method = "drawScreen", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/entity/player/InventoryPlayer;getItemStack()Lnet/minecraft/item/ItemStack;", - shift = At.Shift.BEFORE, - ordinal = 1 - ) + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/entity/player/InventoryPlayer;getItemStack()Lnet/minecraft/item/ItemStack;", + shift = At.Shift.BEFORE, + ordinal = 1 + ) ) public void drawScreen_after(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) { skyHanni$hook.onDrawScreenAfter(mouseX, mouseY, ci); diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt index 0534c2a72..cee60e7ae 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt @@ -182,7 +182,7 @@ object SkyHanniConfigSearchResetCommand { if (!classFilter(className)) continue val objectName = obj.getObjectName() if (obj !is Runnable && objectName.startsWith(className) && (objectName.startsWith("at.hannibal2.skyhanni.config.features.") || - objectName.startsWith("at.hannibal2.skyhanni.config.Storage")) + objectName.startsWith("at.hannibal2.skyhanni.config.Storage")) ) { "" } else { diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyParticlesCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyParticlesCommand.kt index fa7fc2e6e..67b28f0aa 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyParticlesCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/CopyNearbyParticlesCommand.kt @@ -65,7 +65,7 @@ object CopyNearbyParticlesCommand { resultList.add("particle arguments: ${packet.particleArgs.asList()}") resultList.add("") resultList.add("") - counter ++ + counter++ } } } diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyScoreboardCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyScoreboardCommand.kt index 7436ac7f6..b940d1948 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyScoreboardCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/CopyScoreboardCommand.kt @@ -11,11 +11,11 @@ object CopyScoreboardCommand { val resultList = mutableListOf() val noColor = args.size == 1 && args[0] == "true" resultList.add("Title:") - resultList.add(ScoreboardData.objectiveTitle.transformIf({noColor}) { removeColor() }) + resultList.add(ScoreboardData.objectiveTitle.transformIf({ noColor }) { removeColor() }) resultList.add("") for (line in ScoreboardData.sidebarLinesFormatted) { - val scoreboardLine = line.transformIf({noColor}) { removeColor() } + val scoreboardLine = line.transformIf({ noColor }) { removeColor() } resultList.add("'$scoreboardLine'") } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/APIUtil.kt b/src/main/java/at/hannibal2/skyhanni/utils/APIUtil.kt index 5e935b407..1801e7802 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/APIUtil.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/APIUtil.kt @@ -41,9 +41,13 @@ object APIUtil { .useSystemProperties() fun getJSONResponse(urlString: String, silentError: Boolean = false) = - getJSONResponseAsElement(urlString, silentError) as JsonObject + getJSONResponseAsElement(urlString, silentError) as JsonObject - fun getJSONResponseAsElement(urlString: String, silentError: Boolean = false, apiName: String = "Hypixel API"): JsonElement { + fun getJSONResponseAsElement( + urlString: String, + silentError: Boolean = false, + apiName: String = "Hypixel API" + ): JsonElement { val client = builder.build() try { client.execute(HttpGet(urlString)).use { response -> diff --git a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt index 8f05d64ec..78cc8684d 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt @@ -1,11 +1,18 @@ package at.hannibal2.skyhanni.utils data class CachedItemData( - /** -1 = not loaded */ var petCandies: Int? = -1, - /** "" = not loaded */ var heldItem: String? = "", - /** -1 = not loaded */ var sackInASack: Int? = -1, - /** null = not loaded */ var riftTransferable: Boolean? = null, - /** null = not loaded */ var riftExportable: Boolean? = null, - /** null = not loaded */ var itemRarityLastCheck: Long = 0L, // Cant use SimpleTimeMark here - /** null = not loaded */ var itemRarity: LorenzRarity? = null, -) \ No newline at end of file + /** -1 = not loaded */ + var petCandies: Int? = -1, + /** "" = not loaded */ + var heldItem: String? = "", + /** -1 = not loaded */ + var sackInASack: Int? = -1, + /** null = not loaded */ + var riftTransferable: Boolean? = null, + /** null = not loaded */ + var riftExportable: Boolean? = null, + /** null = not loaded */ + var itemRarityLastCheck: Long = 0L, // Cant use SimpleTimeMark here + /** null = not loaded */ + var itemRarity: LorenzRarity? = null, +) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt index fbe2f1e96..4ac55af01 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt @@ -104,13 +104,13 @@ object EntityOutlineRenderer { mc.renderManager.setRenderOutlines(true) // Enable outline mode - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL13.GL_COMBINE); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_RGB, GL11.GL_REPLACE); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_SOURCE0_RGB, GL13.GL_CONSTANT); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_RGB, GL11.GL_SRC_COLOR); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_ALPHA, GL11.GL_REPLACE); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_SOURCE0_ALPHA, GL11.GL_TEXTURE); - GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_ALPHA, GL11.GL_SRC_ALPHA); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL13.GL_COMBINE) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_RGB, GL11.GL_REPLACE) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_SOURCE0_RGB, GL13.GL_CONSTANT) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_RGB, GL11.GL_SRC_COLOR) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_ALPHA, GL11.GL_REPLACE) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_SOURCE0_ALPHA, GL11.GL_TEXTURE) + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_ALPHA, GL11.GL_SRC_ALPHA) // Render x-ray outlines first, ignoring the depth buffer bit if (!isXrayCacheEmpty()) { @@ -293,7 +293,7 @@ object EntityOutlineRenderer { // Only render the view entity when sleeping or in 3rd person mode if (entity === mc.renderViewEntity && !(mc.renderViewEntity is EntityLivingBase && (mc.renderViewEntity as EntityLivingBase).isPlayerSleeping || - mc.gameSettings.thirdPersonView != 0) + mc.gameSettings.thirdPersonView != 0) ) { false } else mc.theWorld.isBlockLoaded(BlockPos(entity)) && (mc.renderManager.shouldRender( @@ -361,7 +361,7 @@ object EntityOutlineRenderer { */ @SubscribeEvent fun onTick(event: LorenzTickEvent) { - if (!(event.phase == EventPriority.NORMAL && isEnabled())) return; + if (!(event.phase == EventPriority.NORMAL && isEnabled())) return val renderGlobal = try { mc.renderGlobal as CustomRenderGlobal @@ -406,4 +406,4 @@ object EntityOutlineRenderer { var noXrayCache: HashMap?, var noOutlineCache: HashSet? ) -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt index c485ec20b..5e4a63452 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt @@ -180,7 +180,15 @@ object GuiRenderUtils { ) } - fun renderItemAndTip(list: MutableList, item: ItemStack?, x: Int, y: Int, mouseX: Int, mouseY: Int, color: Int = 0xFF43464B.toInt()) { + fun renderItemAndTip( + list: MutableList, + item: ItemStack?, + x: Int, + y: Int, + mouseX: Int, + mouseY: Int, + color: Int = 0xFF43464B.toInt() + ) { GuiScreen.drawRect(x, y, x + 16, y + 16, color) if (item != null) { renderItemStack(item, x, y) @@ -276,8 +284,10 @@ object GuiRenderUtils { } fun drawScaledRec(left: Int, top: Int, right: Int, bottom: Int, colour: Int, inverseScale: Float) { - GuiScreen.drawRect((left * inverseScale).toInt(), (top * inverseScale).toInt(), - (right * inverseScale).toInt(), (bottom * inverseScale).toInt(), colour) + GuiScreen.drawRect( + (left * inverseScale).toInt(), (top * inverseScale).toInt(), + (right * inverseScale).toInt(), (bottom * inverseScale).toInt(), colour + ) } fun renderItemAndBackground(item: ItemStack, x: Int, y: Int, colour: Int) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt index 2a6b002af..be29569a5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt @@ -45,7 +45,7 @@ object InventoryUtils { fun inStorage() = openInventoryName().let { (it.contains("Storage") && !it.contains("Rift Storage")) - || it.contains("Ender Chest") || it.contains("Backpack") + || it.contains("Ender Chest") || it.contains("Backpack") } fun getItemInHand(): ItemStack? = Minecraft.getMinecraft().thePlayer.heldItem diff --git a/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt b/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt index ee373d6b1..3aa432cde 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt @@ -73,9 +73,9 @@ class MinecraftConsoleFilter(private val loggerConfigName: String) : Filter { } } if (loggerName == "AsmHelper" && filterConfig.filterAmsHelperTransformer) { - if (formattedMessage.startsWith("Transforming class ")) { - filterConsole("AsmHelper Transforming") - return Filter.Result.DENY + if (formattedMessage.startsWith("Transforming class ")) { + filterConsole("AsmHelper Transforming") + return Filter.Result.DENY } if (filterConfig.filterAsmHelperApplying && formattedMessage.startsWith("Applying AsmWriter ModifyWriter")) { filterConsole("AsmHelper Applying AsmWriter") @@ -118,7 +118,7 @@ class MinecraftConsoleFilter(private val loggerConfigName: String) : Filter { } } - if (thrown != null && filterConfig.filterScoreboardErrors) { + if (thrown != null && filterConfig.filterScoreboardErrors) { val cause = thrown.cause if (cause != null && cause.stackTrace.isNotEmpty()) { val first = cause.stackTrace[0] @@ -241,13 +241,25 @@ class MinecraftConsoleFilter(private val loggerConfigName: String) : Filter { fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "dev.printUnfilteredDebugs", "dev.minecraftConsoles.printUnfilteredDebugs") event.move(3, "dev.logUnfilteredFile", "dev.minecraftConsoles.logUnfilteredFile") - event.move(3, "dev.printUnfilteredDebugsOutsideSkyBlock", "dev.minecraftConsoles.printUnfilteredDebugsOutsideSkyBlock") + event.move( + 3, + "dev.printUnfilteredDebugsOutsideSkyBlock", + "dev.minecraftConsoles.printUnfilteredDebugsOutsideSkyBlock" + ) event.move(3, "dev.printFilteredReason", "dev.minecraftConsoles.printFilteredReason") event.move(3, "dev.filterChat", "dev.minecraftConsoles.consoleFilter.filterChat") event.move(3, "dev.filterGrowBuffer", "dev.minecraftConsoles.consoleFilter.filterGrowBuffer") event.move(3, "dev.filterUnknownSound", "dev.minecraftConsoles.consoleFilter.filterUnknownSound") - event.move(3, "dev.filterParticleVillagerHappy", "dev.minecraftConsoles.consoleFilter.filterParticleVillagerHappy") - event.move(3, "dev.filterAmsHelperTransformer", "dev.minecraftConsoles.consoleFilter.filterAmsHelperTransformer") + event.move( + 3, + "dev.filterParticleVillagerHappy", + "dev.minecraftConsoles.consoleFilter.filterParticleVillagerHappy" + ) + event.move( + 3, + "dev.filterAmsHelperTransformer", + "dev.minecraftConsoles.consoleFilter.filterAmsHelperTransformer" + ) event.move(3, "dev.filterAsmHelperApplying", "dev.minecraftConsoles.consoleFilter.filterAsmHelperApplying") event.move(3, "dev.filterBiomeIdBounds", "dev.minecraftConsoles.consoleFilter.filterBiomeIdBounds") event.move(3, "dev.filterScoreboardErrors", "dev.minecraftConsoles.consoleFilter.filterScoreboardErrors") diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index e5c45bab1..007d9f1d5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -185,8 +185,8 @@ object NEUItems { ErrorManager.logError( IllegalStateException("Something went wrong!"), "Encountered an error getting the item for §7$this§c. " + - "This may be because your NEU repo is outdated. Please ask in the SkyHanni " + - "Discord if this is the case" + "This may be because your NEU repo is outdated. Please ask in the SkyHanni " + + "Discord if this is the case" ) fallbackItem } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt index c9903ffc2..e8acae501 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt @@ -53,7 +53,9 @@ class ParkourHelper( if (visible) { for ((index, location) in locations.withIndex()) { - if (location.offsetCenter().distanceToPlayer() < detectionRange && Minecraft.getMinecraft().thePlayer.onGround) { + if (location.offsetCenter() + .distanceToPlayer() < detectionRange && Minecraft.getMinecraft().thePlayer.onGround + ) { current = index } } @@ -146,4 +148,4 @@ class ParkourHelper( private fun colorForIndex(index: Int) = if (rainbowColor) { RenderUtils.chromaColor(4.seconds, offset = -index / 12f, brightness = 0.7f) } else monochromeColor -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SoundUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SoundUtils.kt index 326283d92..c9892a9bf 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SoundUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SoundUtils.kt @@ -9,7 +9,7 @@ import net.minecraft.util.ResourceLocation object SoundUtils { private val beepSound by lazy { createSound("random.orb", 1f) } private val clickSound by lazy { createSound("gui.button.press", 1f) } - private val errorSound by lazy {createSound("mob.endermen.portal", 0f)} + private val errorSound by lazy { createSound("mob.endermen.portal", 0f) } val centuryActiveTimerAlert by lazy { createSound("skyhanni:centurytimer.active", 1f) } fun ISound.playSound() { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 2066b809b..dd114d8fd 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -18,7 +18,8 @@ import java.util.regex.Pattern object StringUtils { // TODO USE SH-REPO private val playerChatPattern = "(?.*?)(?:§[f7r])*: .*".toPattern() - private val chatUsernamePattern = "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?(?:§\\w\\[\\w.+] )?(?:§\\w)?(?\\w+))(?: (?:§\\w)?\\[.+?])?".toPattern() + private val chatUsernamePattern = + "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?(?:§\\w\\[\\w.+] )?(?:§\\w)?(?\\w+))(?: (?:§\\w)?\\[.+?])?".toPattern() private val whiteSpaceResetPattern = "^(?:\\s|§r)*|(?:\\s|§r)*$".toPattern() private val whiteSpacePattern = "^\\s*|\\s*$".toPattern() private val resetPattern = "(?i)§R".toPattern() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt index 55ea90b52..2a6d1f5ab 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt @@ -11,7 +11,7 @@ class Timer( private var started: SimpleTimeMark = SimpleTimeMark.now(), startPaused: Boolean = false -): Comparable { +) : Comparable { @Expose private var paused: SimpleTimeMark? = null @@ -40,4 +40,4 @@ class Timer( override fun compareTo(other: Timer): Int = remaining.compareTo(other.remaining) -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/ContributorListJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/ContributorListJson.java index 6ab663941..8e5648f5e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/ContributorListJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/ContributorListJson.java @@ -1,4 +1,5 @@ package at.hannibal2.skyhanni.utils.jsonobjects; + import com.google.gson.annotations.Expose; import java.util.List; @@ -6,4 +7,4 @@ import java.util.List; public class ContributorListJson { @Expose public List usernames; -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/MayorJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/MayorJson.java index bc877658a..d2173c74b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/MayorJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/MayorJson.java @@ -27,11 +27,11 @@ public class MayorJson { @Override public String toString() { return "Candidate{" + - "key='" + key + '\'' + - ", name='" + name + '\'' + - ", perks=" + perks + - ", votes=" + votes + - '}'; + "key='" + key + '\'' + + ", name='" + name + '\'' + + ", perks=" + perks + + ", votes=" + votes + + '}'; } } @@ -62,9 +62,9 @@ public class MayorJson { @Override public String toString() { return "Perk{" + - "name='" + name + '\'' + - ", description='" + description + '\'' + - '}'; + "name='" + name + '\'' + + ", description='" + description + '\'' + + '}'; } } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/SeaCreatureJson.java b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/SeaCreatureJson.java index 52ed7f636..8053e87cb 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/SeaCreatureJson.java +++ b/src/main/java/at/hannibal2/skyhanni/utils/jsonobjects/SeaCreatureJson.java @@ -9,7 +9,8 @@ import java.util.Map; public class SeaCreatureJson { - public static Type TYPE = new TypeToken>(){}.getType(); + public static Type TYPE = new TypeToken>() { + }.getType(); public static class Variant { @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index 2a3321abc..552e1a069 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -21,7 +21,7 @@ interface Renderable { val height: Int fun isHovered(posX: Int, posY: Int) = currentRenderPassMousePosition?.let { (x, y) -> x in (posX..posX + width) - && y in (posY..posY + height) // TODO: adjust for variable height? + && y in (posY..posY + height) // TODO: adjust for variable height? } ?: false /** diff --git a/src/main/java/at/hannibal2/skyhanni/utils/shader/Shader.kt b/src/main/java/at/hannibal2/skyhanni/utils/shader/Shader.kt index f198f7e7a..7fb13ab86 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/shader/Shader.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/shader/Shader.kt @@ -30,7 +30,7 @@ abstract class Shader(vertex: String, fragment: String) { if (linkStatus == GL11.GL_FALSE) { LorenzUtils.consoleLog( "Error occurred when linking program with Vertex Shader: $vertex and Fragment Shader: $fragment : " + - StringUtils.trim(ShaderHelper.glGetProgramInfoLog(shaderProgram, 1024)) + StringUtils.trim(ShaderHelper.glGetProgramInfoLog(shaderProgram, 1024)) ) } @@ -52,4 +52,4 @@ abstract class Shader(vertex: String, fragment: String) { fun registerUniform(uniformType: Uniform.UniformType, name: String, uniformValuesSupplier: Supplier) { uniforms.add(Uniform(this, uniformType, name, uniformValuesSupplier)) } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt index e554a4098..790550103 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt @@ -27,9 +27,9 @@ class ShaderHelper { // Check OpenGL 2.0 Capabilities val openGL20supported = capabilities.OpenGL20 SHADERS_SUPPORTED = openGL20supported || - capabilities.GL_ARB_vertex_shader && - capabilities.GL_ARB_fragment_shader && - capabilities.GL_ARB_shader_objects + capabilities.GL_ARB_vertex_shader && + capabilities.GL_ARB_fragment_shader && + capabilities.GL_ARB_shader_objects var log = "Shaders are" if (!SHADERS_SUPPORTED) log += " not" @@ -67,12 +67,18 @@ class ShaderHelper { if (USING_ARB_SHADERS) ARBShaderObjects.glLinkProgramARB(program) else GL20.glLinkProgram(program) } - fun glGetProgramInfoLog(program: Int, maxLength: Int) : String { - return if (USING_ARB_SHADERS) ARBShaderObjects.glGetInfoLogARB(program, maxLength) else GL20.glGetProgramInfoLog(program, maxLength) + fun glGetProgramInfoLog(program: Int, maxLength: Int): String { + return if (USING_ARB_SHADERS) ARBShaderObjects.glGetInfoLogARB( + program, + maxLength + ) else GL20.glGetProgramInfoLog(program, maxLength) } - fun glGetProgrami(program: Int, pname: Int) : Int { - return if (USING_ARB_SHADERS) ARBShaderObjects.glGetObjectParameteriARB(program, pname) else GL20.glGetProgrami(program, pname) + fun glGetProgrami(program: Int, pname: Int): Int { + return if (USING_ARB_SHADERS) ARBShaderObjects.glGetObjectParameteriARB( + program, + pname + ) else GL20.glGetProgrami(program, pname) } fun glUseProgram(program: Int) { @@ -80,27 +86,39 @@ class ShaderHelper { } fun glAttachShader(program: Int, shaderIn: Int) { - if (USING_ARB_SHADERS) ARBShaderObjects.glAttachObjectARB(program, shaderIn) else GL20.glAttachShader(program, shaderIn) + if (USING_ARB_SHADERS) ARBShaderObjects.glAttachObjectARB(program, shaderIn) else GL20.glAttachShader( + program, + shaderIn + ) } - fun glCreateShader(type: Int) : Int { + fun glCreateShader(type: Int): Int { return if (USING_ARB_SHADERS) ARBShaderObjects.glCreateShaderObjectARB(type) else GL20.glCreateShader(type) } fun glShaderSource(shader: Int, source: CharSequence) { - if (USING_ARB_SHADERS) ARBShaderObjects.glShaderSourceARB(shader, source) else GL20.glShaderSource(shader, source) + if (USING_ARB_SHADERS) ARBShaderObjects.glShaderSourceARB(shader, source) else GL20.glShaderSource( + shader, + source + ) } fun glCompileShader(shader: Int) { if (USING_ARB_SHADERS) ARBShaderObjects.glCompileShaderARB(shader) else GL20.glCompileShader(shader) } - fun glGetShaderi(shader: Int, pname: Int) : Int { - return if (USING_ARB_SHADERS) ARBShaderObjects.glGetObjectParameteriARB(shader, pname) else GL20.glGetShaderi(shader, pname) + fun glGetShaderi(shader: Int, pname: Int): Int { + return if (USING_ARB_SHADERS) ARBShaderObjects.glGetObjectParameteriARB( + shader, + pname + ) else GL20.glGetShaderi(shader, pname) } - fun glGetShaderInfoLog(shader: Int, maxLength: Int) : String { - return if (USING_ARB_SHADERS) ARBShaderObjects.glGetInfoLogARB(shader, maxLength) else GL20.glGetShaderInfoLog(shader, maxLength) + fun glGetShaderInfoLog(shader: Int, maxLength: Int): String { + return if (USING_ARB_SHADERS) ARBShaderObjects.glGetInfoLogARB( + shader, + maxLength + ) else GL20.glGetShaderInfoLog(shader, maxLength) } fun glDeleteShader(shader: Int) { @@ -112,13 +130,21 @@ class ShaderHelper { } fun glUniform3f(location: Int, v0: Float, v1: Float, v2: Float) { - if (USING_ARB_SHADERS) ARBShaderObjects.glUniform3fARB(location, v0, v1, v2) else GL20.glUniform3f(location, v0, v1, v2) + if (USING_ARB_SHADERS) ARBShaderObjects.glUniform3fARB(location, v0, v1, v2) else GL20.glUniform3f( + location, + v0, + v1, + v2 + ) } - fun glGetUniformLocation(program: Int, name: CharSequence) : Int { - return if (USING_ARB_SHADERS) ARBShaderObjects.glGetUniformLocationARB(program, name) else GL20.glGetUniformLocation(program, name) + fun glGetUniformLocation(program: Int, name: CharSequence): Int { + return if (USING_ARB_SHADERS) ARBShaderObjects.glGetUniformLocationARB( + program, + name + ) else GL20.glGetUniformLocation(program, name) } fun areShadersSupported() = SHADERS_SUPPORTED } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderManager.kt b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderManager.kt index e7eb48f11..3dbec3c6e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderManager.kt @@ -21,7 +21,7 @@ object ShaderManager { CHROMA(ChromaShader.INSTANCE); companion object { - fun getShaderInstance(shaderName: String) : Shader? = when (shaderName) { + fun getShaderInstance(shaderName: String): Shader? = when (shaderName) { "chroma" -> CHROMA.shader else -> { null @@ -58,7 +58,7 @@ object ShaderManager { activeShader = null } - fun loadShader(type: ShaderType, fileName: String) : Int { + fun loadShader(type: ShaderType, fileName: String): Int { val resourceLocation = ResourceLocation("skyhanni:shaders/$fileName${type.extension}") val source = StringBuilder() @@ -73,8 +73,10 @@ object ShaderManager { ShaderHelper.glCompileShader(shaderID) if (ShaderHelper.glGetShaderi(shaderID, ShaderHelper.GL_COMPILE_STATUS) == 0) { - LorenzUtils.consoleLog("Error occurred when compiling shader $fileName${type.extension} : " + - StringUtils.trim(ShaderHelper.glGetShaderInfoLog(shaderID, 1024))) + LorenzUtils.consoleLog( + "Error occurred when compiling shader $fileName${type.extension} : " + + StringUtils.trim(ShaderHelper.glGetShaderInfoLog(shaderID, 1024)) + ) } return shaderID @@ -84,4 +86,4 @@ object ShaderManager { enum class ShaderType(val extension: String, val shaderType: Int) { VERTEX(".vsh", ShaderHelper.GL_VERTEX_SHADER), FRAGMENT(".fsh", ShaderHelper.GL_FRAGMENT_SHADER) -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/shader/Uniform.kt b/src/main/java/at/hannibal2/skyhanni/utils/shader/Uniform.kt index e87ea3b22..d57398ea4 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/shader/Uniform.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/shader/Uniform.kt @@ -37,9 +37,10 @@ class Uniform( val values = newUniformValue as FloatArray ShaderHelper.glUniform3f(uniformID, values[0], values[1], values[2]) } + UniformType.BOOL -> ShaderHelper.glUniform1f(uniformID, if (newUniformValue as Boolean) 1f else 0f) } previousUniformValue = newUniformValue } } -} \ No newline at end of file +} diff --git a/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt index 0ac8cc8de..cd34234b5 100644 --- a/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt +++ b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt @@ -6,17 +6,17 @@ import org.junit.jupiter.api.Test class ItemUtilsTest { val items: MutableMap> = mutableMapOf( - "§5Hoe of Greatest Tilling" to Pair("§5Hoe of Greatest Tilling", 1), - "§fSilver medal §8x2" to Pair("§fSilver medal", 2), - "§aJacob's Ticket §8x32" to Pair("§aJacob's Ticket", 32), - "§9Delicate V" to Pair("§9Delicate V", 1), - " §81x §9Enchanted Sugar Cane" to Pair("§9Enchanted Sugar Cane", 1), - "§6Gold medal" to Pair("§6Gold medal", 1), - " §8+§319k §7Farming XP" to Pair("§7Farming XP", 19_000), - " §8+§215 §7Garden Experience" to Pair("§7Garden Experience", 15), - " §8+§c21 Copper" to Pair("Copper", 21), - " §8+§b10 Bits" to Pair("Bits", 10), - " §8+§37.2k §7Farming XP" to Pair("§7Farming XP", 7_200), + "§5Hoe of Greatest Tilling" to Pair("§5Hoe of Greatest Tilling", 1), + "§fSilver medal §8x2" to Pair("§fSilver medal", 2), + "§aJacob's Ticket §8x32" to Pair("§aJacob's Ticket", 32), + "§9Delicate V" to Pair("§9Delicate V", 1), + " §81x §9Enchanted Sugar Cane" to Pair("§9Enchanted Sugar Cane", 1), + "§6Gold medal" to Pair("§6Gold medal", 1), + " §8+§319k §7Farming XP" to Pair("§7Farming XP", 19_000), + " §8+§215 §7Garden Experience" to Pair("§7Garden Experience", 15), + " §8+§c21 Copper" to Pair("Copper", 21), + " §8+§b10 Bits" to Pair("Bits", 10), + " §8+§37.2k §7Farming XP" to Pair("§7Farming XP", 7_200), ) @Test @@ -31,4 +31,4 @@ class ItemUtilsTest { } } } -} \ No newline at end of file +} -- cgit From 7137b0a07ba4c4efe65282a18ebc68f25ffa1796 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 12:53:20 +0100 Subject: The cleanup after the cleanup --- .../skyhanni/features/chat/PlayerDeathMessages.kt | 13 ++++--------- .../skyhanni/features/dungeon/DungeonHideItems.kt | 2 ++ .../features/dungeon/DungeonMilestonesDisplay.kt | 10 +++------- .../features/event/anniversary/Year300RaffleEvent.kt | 6 ++---- .../garden/fortuneguide/pages/UpgradePage.kt | 1 + .../skyhanni/features/misc/PlayerChatSymbols.kt | 5 ++--- .../features/misc/discordrpc/DiscordStatus.kt | 8 ++++---- .../skyhanni/features/misc/trevor/TrevorFeatures.kt | 5 +++-- .../features/misc/visualwords/VisualWordGui.kt | 1 + .../reputationhelper/miniboss/DailyMiniBossHelper.kt | 8 ++++---- .../at/hannibal2/skyhanni/features/rift/RiftAPI.kt | 3 +-- .../hannibal2/skyhanni/features/slayer/SlayerType.kt | 2 -- .../features/summonings/SummoningSoulsName.kt | 1 + .../skyhanni/mixins/hooks/FontRendererHook.kt | 1 + .../at/hannibal2/skyhanni/utils/CachedItemData.kt | 20 +++++++++++++------- .../at/hannibal2/skyhanni/utils/ParkourHelper.kt | 6 +++--- .../hannibal2/skyhanni/utils/shader/ShaderHelper.kt | 8 +++++++- 17 files changed, 52 insertions(+), 48 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt index b9088bac6..8448627f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PlayerDeathMessages.kt @@ -37,9 +37,8 @@ class PlayerDeathMessages { val message = event.message deathMessagePattern.matchMatcher(message) { val name = group("name") - if (SkyHanniMod.feature.markedPlayers.highlightInChat && !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight && MarkedPlayerManager.isMarkedPlayer( - name - ) + if (SkyHanniMod.feature.markedPlayers.highlightInChat && + !LorenzUtils.inDungeons && !LorenzUtils.inKuudraFight && MarkedPlayerManager.isMarkedPlayer(name) ) { val reason = group("reason").removeColor() LorenzUtils.chat(" §c☠ §e$name §7$reason", false) @@ -47,12 +46,8 @@ class PlayerDeathMessages { return } - - if (isHideFarDeathsEnabled() && System.currentTimeMillis() > lastTimePlayerSeen.getOrDefault( - name, - 0 - ) + 30_000 - ) { + val time = System.currentTimeMillis() > lastTimePlayerSeen.getOrDefault(name, 0) + 30_000 + if (isHideFarDeathsEnabled() && time) { event.blockedReason = "far_away_player_death" } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt index 5a01eae76..da2d35e0d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt @@ -27,6 +27,8 @@ class DungeonHideItems { private val hideParticles = mutableMapOf() private val movingSkeletonSkulls = mutableMapOf() + // TODO put in skull data repo part + private val soulWeaverHider = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmYyNGVkNjg3NTMwNGZhNGExZjBjNzg1YjJjYjZhNmE3MjU2M2U5ZjNlMjRlYTU1ZTE4MTc4NDUyMTE5YWE2NiJ9fX0=" private val blessingTexture = diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt index fbf6a3850..b3a6a1f59 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonMilestonesDisplay.kt @@ -12,6 +12,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.concurrent.fixedRateTimer class DungeonMilestonesDisplay { + private val config get() = SkyHanniMod.feature.dungeon companion object { private var display = "" @@ -83,13 +84,8 @@ class DungeonMilestonesDisplay { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return - SkyHanniMod.feature.dungeon.showMileStonesDisplayPos.renderString( - color + display, - posLabel = "Dungeon Milestone" - ) + config.showMileStonesDisplayPos.renderString(color + display, posLabel = "Dungeon Milestone") } - private fun isEnabled(): Boolean { - return LorenzUtils.inDungeons && SkyHanniMod.feature.dungeon.showMilestonesDisplay - } + private fun isEnabled() = LorenzUtils.inDungeons && config.showMilestonesDisplay } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt index d636f6810..71d8040f3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/anniversary/Year300RaffleEvent.kt @@ -36,10 +36,8 @@ object Year300RaffleEvent { } } - fun isEnabled() = config.enableActiveTimer && - Instant.now().isBefore(SkyBlockTime(301).toInstant()) && - LorenzUtils.inSkyBlock - + fun isEnabled() = LorenzUtils.inSkyBlock && config.enableActiveTimer && + Instant.now().isBefore(SkyBlockTime(301).toInstant()) @SubscribeEvent fun onRender(event: GuiRenderEvent.GuiOverlayRenderEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt index 70bc23125..dd6664bc7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/UpgradePage.kt @@ -21,6 +21,7 @@ class UpgradePage : FFGuideGUI.FFGuidePage() { val adjustedY = FFGuideGUI.guiTop + 20 + pageScroll val inverseScale = 1 / 0.75f + // TODO fix duplicate drawString lines, add guiLeft, guiTop and inverseScale GlStateManager.scale(0.75f, 0.75f, 1f) GuiRenderUtils.drawString( "Upgrade", diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt index 2f47b3db1..5133e65be 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt @@ -72,9 +72,8 @@ class PlayerChatSymbols { if (!component.text_skyhanni().contains(rankAndName)) return false val oldText = component.text_skyhanni() - component.setText_skyhanni( - component.text_skyhanni().replace(oldText, getNewText(emblemText, oldText, rankAndName)) - ) + val newText = getNewText(emblemText, oldText, rankAndName) + component.setText_skyhanni(component.text_skyhanni().replace(oldText, newText)) return true } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt index 780ed54c7..141870585 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt @@ -371,10 +371,10 @@ enum class DiscordStatus(private val displayMessageSupplier: Supplier?) }), AFK({ - if (beenAfkFor.passedSince() > 5.minutes) "AFK for ${ - beenAfkFor.passedSince().format(maxUnits = 1, longName = true) - }" - else AutoStatus.AFK.placeholderText + if (beenAfkFor.passedSince() > 5.minutes) { + val format = beenAfkFor.passedSince().format(maxUnits = 1, longName = true) + "AFK for $format" + } else AutoStatus.AFK.placeholderText }) ; diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt index 7586805df..318d4c1f0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorFeatures.kt @@ -232,8 +232,9 @@ object TrevorFeatures { location = LorenzVec(location.x, TrevorSolver.averageHeight, location.z) } if (TrevorSolver.mobLocation == CurrentMobArea.FOUND) { - val displayName = - if (TrevorSolver.currentMob == null) "Mob Location" else TrevorSolver.currentMob!!.mobName + val displayName = if (TrevorSolver.currentMob == null) "Mob Location" else { + TrevorSolver.currentMob!!.mobName + } location = TrevorSolver.mobCoordinates event.drawWaypointFilled(location.add(0, -2, 0), LorenzColor.GREEN.toColor(), true, true) event.drawDynamicText(location.add(0, 1, 0), displayName, 1.5) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt index b6a8feca2..a996d7277 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/VisualWordGui.kt @@ -283,6 +283,7 @@ open class VisualWordGui : GuiScreen() { GlStateManager.scale(0.75f, 0.75f, 1f) + // TODO remove more code duplication drawUnmodifiedString( "§bThe top line of each section", (guiLeft + 10) * inverseScale, diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt index be90eec14..79a1a5361 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt @@ -55,10 +55,10 @@ class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHel } } - private fun needMiniBossQuest(miniBoss: CrimsonMiniBoss): Boolean { - val bossQuest = reputationHelper.questHelper.getQuest() - return bossQuest != null && bossQuest.miniBoss == miniBoss && bossQuest.state == QuestState.ACCEPTED - } + private fun needMiniBossQuest(miniBoss: CrimsonMiniBoss) = + reputationHelper.questHelper.getQuest()?.let { + it.miniBoss == miniBoss && it.state == QuestState.ACCEPTED + } ?: false private fun finished(miniBoss: CrimsonMiniBoss) { reputationHelper.questHelper.finishMiniBoss(miniBoss) diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt index 780d8494c..ab3fa40c1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt @@ -29,8 +29,7 @@ object RiftAPI { fun inLivingCave() = LorenzUtils.skyBlockArea == "Living Cave" fun inLivingStillness() = LorenzUtils.skyBlockArea == "Living Stillness" - fun inStillgoreChateau() = - LorenzUtils.skyBlockArea == "Stillgore Château" || LorenzUtils.skyBlockArea == "Oubliette" + fun inStillgoreChateau() = LorenzUtils.skyBlockArea.let { it == "Stillgore Château" || it == "Oubliette" } fun inDreadfarm() = LorenzUtils.skyBlockArea == "Dreadfarm" } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt index a536398a7..44937dd7f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt @@ -15,6 +15,4 @@ enum class SlayerType(val displayName: String, val clazz: Class<*>) { INFERNO("Inferno Demonlord", EntityBlaze::class.java), VAMPIRE("Riftstalker Bloodfiend", EntityOtherPlayerMP::class.java) ; - - companion object } diff --git a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt index 602a610df..6d206bf17 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/summonings/SummoningSoulsName.kt @@ -18,6 +18,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class SummoningSoulsName { + // TODO repo private val texture = "ewogICJ0aW1lc3RhbXAiIDogMTYwMTQ3OTI2NjczMywKICAicHJvZmlsZUlkIiA6ICJmMzA1ZjA5NDI0NTg0ZjU" + "4YmEyYjY0ZjAyZDcyNDYyYyIsCiAgInByb2ZpbGVOYW1lIiA6ICJqcm9ja2EzMyIsCiAgInNpZ25hdH" + diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt index 8eadaa3e4..f639fbe04 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt @@ -141,6 +141,7 @@ object FontRendererHook { return if (LorenzUtils.inSkyBlock && !SkyHanniMod.feature.chroma.enabled) constant else "0123456789abcdefklmnorz" } + // TODO add better parameter names @JvmStatic fun toggleChromaCondition_shouldResetStyles( text: String, diff --git a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt index 78cc8684d..9d00958f2 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt @@ -1,18 +1,24 @@ package at.hannibal2.skyhanni.utils data class CachedItemData( - /** -1 = not loaded */ + // -1 = not loaded var petCandies: Int? = -1, - /** "" = not loaded */ + + // "" = not loaded var heldItem: String? = "", - /** -1 = not loaded */ + + // -1 = not loaded var sackInASack: Int? = -1, - /** null = not loaded */ + + // null = not loaded var riftTransferable: Boolean? = null, - /** null = not loaded */ + + // null = not loaded var riftExportable: Boolean? = null, - /** null = not loaded */ + + // null = not loaded var itemRarityLastCheck: Long = 0L, // Cant use SimpleTimeMark here - /** null = not loaded */ + + // null = not loaded var itemRarity: LorenzRarity? = null, ) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt index e8acae501..68f7a0d49 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ParkourHelper.kt @@ -53,9 +53,9 @@ class ParkourHelper( if (visible) { for ((index, location) in locations.withIndex()) { - if (location.offsetCenter() - .distanceToPlayer() < detectionRange && Minecraft.getMinecraft().thePlayer.onGround - ) { + val onGround = Minecraft.getMinecraft().thePlayer.onGround + val closeEnough = location.offsetCenter().distanceToPlayer() < detectionRange + if (closeEnough && onGround) { current = index } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt index 790550103..2576b4248 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/shader/ShaderHelper.kt @@ -1,7 +1,13 @@ package at.hannibal2.skyhanni.utils.shader import at.hannibal2.skyhanni.utils.LorenzUtils -import org.lwjgl.opengl.* +import org.lwjgl.opengl.ARBFragmentShader +import org.lwjgl.opengl.ARBShaderObjects +import org.lwjgl.opengl.ARBVertexShader +import org.lwjgl.opengl.ContextCapabilities +import org.lwjgl.opengl.GL11 +import org.lwjgl.opengl.GL20 +import org.lwjgl.opengl.GLContext /** * Class to check shaders support, OpenGL capabilities, and shader helper functions -- cgit From 5c9cbdba458638ae962ccf92e750ebdcea718478 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Wed, 22 Nov 2023 12:10:51 +0000 Subject: Internal Change: More Random Cleanup (#724) More Random Cleanup #724 --- .../at/hannibal2/skyhanni/data/GuiEditManager.kt | 2 +- .../java/at/hannibal2/skyhanni/data/IslandType.kt | 2 +- .../skyhanni/features/chat/ChatFilterGui.kt | 6 ++--- .../features/chat/CompactBestiaryChatMessage.kt | 14 +++++------ .../skyhanni/features/dungeon/DungeonCopilot.kt | 6 ++--- .../skyhanni/features/dungeon/DungeonHideItems.kt | 3 +-- .../features/dungeon/DungeonLividFinder.kt | 4 ++-- .../event/diana/GriffinBurrowParticleFinder.kt | 2 +- .../features/event/diana/SoopyGuessBurrow.kt | 28 +++++++++++----------- .../features/garden/contest/FarmingContestAPI.kt | 2 +- .../garden/contest/JacobContestFFNeededDisplay.kt | 4 ---- .../contest/JacobFarmingContestsInventory.kt | 5 +--- .../garden/farming/FarmingWeightDisplay.kt | 2 +- .../farming/WildStrawberryDyeNotification.kt | 2 +- .../garden/visitor/GardenVisitorFeatures.kt | 4 +--- .../visitor/HighlightVisitorsOutsideOfGarden.kt | 2 +- .../skyhanni/features/garden/visitor/VisitorAPI.kt | 2 +- .../skyhanni/features/inventory/HarpFeatures.kt | 2 +- .../itemabilities/FireVeilWandParticles.kt | 2 +- .../crystalhollows/CrystalHollowsNamesInCore.kt | 6 ++--- .../skyhanni/features/misc/BrewingStandOverlay.kt | 4 ++-- .../skyhanni/features/misc/QuickModMenuSwitch.kt | 2 +- .../skyhanni/features/misc/SkyBlockKickDuration.kt | 8 +++---- .../skyhanni/features/misc/trevor/TrevorTracker.kt | 2 +- .../misc/update/GuiOptionEditorUpdateCheck.kt | 2 +- .../skyhanni/features/misc/update/UpdateManager.kt | 8 +++---- .../miniboss/DailyMiniBossHelper.kt | 4 ++-- .../area/dreadfarm/RiftWiltedBerberisHelper.kt | 4 ++-- .../features/rift/area/wyldwoods/RiftLarva.kt | 2 +- .../features/rift/area/wyldwoods/RiftOdonata.kt | 2 +- .../skyhanni/mixins/hooks/FontRendererHook.kt | 4 ++-- .../test/SkyHanniConfigSearchResetCommand.kt | 3 +-- .../skyhanni/test/SkyHanniDebugsAndTests.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/BlockUtils.kt | 4 ++-- .../skyhanni/utils/EntityOutlineRenderer.kt | 6 ++--- .../at/hannibal2/skyhanni/utils/GuiRenderUtils.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/ItemUtils.kt | 2 +- .../at/hannibal2/skyhanni/utils/KeyboardManager.kt | 2 +- .../at/hannibal2/skyhanni/utils/LocationUtils.kt | 4 ++-- .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/NumberUtil.kt | 2 +- .../at/hannibal2/skyhanni/utils/RenderUtils.kt | 11 ++++----- .../skyhanni/utils/SkyBlockItemModifierUtils.kt | 2 +- .../at/hannibal2/skyhanni/utils/StringUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/Timer.kt | 2 +- .../skyhanni/utils/renderables/Renderable.kt | 8 +++---- .../at/hannibal2/skyhanni/test/ItemUtilsTest.kt | 2 +- .../test/garden/VisitorToolTipParserTest.kt | 6 ++--- 48 files changed, 95 insertions(+), 109 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt index 3af97e0f9..29a344b18 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/GuiEditManager.kt @@ -24,7 +24,7 @@ import kotlin.time.Duration.Companion.minutes class GuiEditManager { - var lastHotkeyPressed = SimpleTimeMark.farPast() + private var lastHotkeyPressed = SimpleTimeMark.farPast() @SubscribeEvent fun onKeyClick(event: LorenzKeyPressEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt index 3ab213025..17755da88 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt @@ -31,6 +31,6 @@ enum class IslandType(val displayName: String, val apiName: String = "null") { fun getByNameOrUnknown(name: String) = getByNameOrNull(name) ?: UNKNOWN fun getByName(name: String) = getByNameOrNull(name) ?: error("IslandType not found: '$name'") - fun getByNameOrNull(name: String) = entries.firstOrNull { it.displayName == name } + private fun getByNameOrNull(name: String) = entries.firstOrNull { it.displayName == name } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilterGui.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilterGui.kt index 3c1586d61..b9a9a6e0b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilterGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilterGui.kt @@ -76,7 +76,7 @@ class ChatFilterGui(private val history: List { + private fun splitLine(comp: IChatComponent): List { return GuiUtilRenderComponents.splitText( comp, w - (ChatManager.ActionKind.maxLength + reasonMaxLength + 10 + 10), @@ -93,11 +93,11 @@ class ChatFilterGui(private val history: List() - var acceptMoreDescription = true + private var inBestiary = false + private var bestiaryDescription = mutableListOf() + private var acceptMoreDescription = true var command = "" private var blockedLines = 0 - var lastBorder: IChatComponent? = null - var lastEmpty: IChatComponent? = null + private var lastBorder: IChatComponent? = null + private var lastEmpty: IChatComponent? = null - var milestoneMessage: String? = null + private var milestoneMessage: String? = null - val milestonePattern = "^.+(§8\\d{1,3}➡§e\\d{1,3})$".toRegex() + private val milestonePattern = "^.+(§8\\d{1,3}➡§e\\d{1,3})$".toRegex() @SubscribeEvent fun onChatMessage(event: LorenzChatEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCopilot.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCopilot.kt index 834cd8fd6..8119535fd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCopilot.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCopilot.kt @@ -17,8 +17,8 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class DungeonCopilot { - var nextStep = "" - var searchForKey = false + private var nextStep = "" + private var searchForKey = false @SubscribeEvent fun onChatMessage(event: LorenzChatEvent) { @@ -142,4 +142,4 @@ class DungeonCopilot { event.move(3, "dungeon.copilotEnabled", "dungeon.dungeonCopilot.enabled") event.move(3, "dungeon.copilotPos", "dungeon.dungeonCopilot.pos") } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt index da2d35e0d..801b28ab4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt @@ -81,8 +81,7 @@ class DungeonHideItems { event.isCanceled = true } - val itemStack = head - if (itemStack != null && itemStack.cleanName() == "Superboom TNT") { + if (head != null && head.cleanName() == "Superboom TNT") { event.isCanceled = true hideParticles[entity] = System.currentTimeMillis() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt index 48a0a9925..0c5b4fc52 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt @@ -80,7 +80,7 @@ object DungeonLividFinder { RenderLivingEntityHelper.setNoHurtTime(newLivid) { shouldHighlight() } } - fun shouldHighlight() = getLividAlive() != null && config.enabled + private fun shouldHighlight() = getLividAlive() != null && config.enabled private fun getLividAlive() = lividEntity?.let { if (!it.isDead && it.health > 0.5) it else null @@ -132,7 +132,7 @@ object DungeonLividFinder { gotBlinded = false } - fun inDungeon(): Boolean { + private fun inDungeon(): Boolean { if (!LorenzUtils.inDungeons) return false if (!DungeonAPI.inBossRoom) return false if (!DungeonAPI.isOneOf("F5", "M5")) return false diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowParticleFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowParticleFinder.kt index 486a19d80..1b23bb1de 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowParticleFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowParticleFinder.kt @@ -22,7 +22,7 @@ class GriffinBurrowParticleFinder { private val recentlyDugParticleBurrows = mutableListOf() private val burrows = mutableMapOf() - var lastDugParticleBurrow: LorenzVec? = null + private var lastDugParticleBurrow: LorenzVec? = null @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true) fun onChatPacket(event: PacketEvent.ReceiveEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/SoopyGuessBurrow.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/SoopyGuessBurrow.kt index ec0a1e2ae..a0b34e328 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/SoopyGuessBurrow.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/SoopyGuessBurrow.kt @@ -23,23 +23,23 @@ import kotlin.math.sin */ class SoopyGuessBurrow { - var dingIndex = 0 - var lastDing = 0L - var lastDingPitch = 0f - var firstPitch = 0f - var lastParticlePoint: LorenzVec? = null - var lastParticlePoint2: LorenzVec? = null - var firstParticlePoint: LorenzVec? = null - var particlePoint: LorenzVec? = null - var guessPoint: LorenzVec? = null + private var dingIndex = 0 + private var lastDing = 0L + private var lastDingPitch = 0f + private var firstPitch = 0f + private var lastParticlePoint: LorenzVec? = null + private var lastParticlePoint2: LorenzVec? = null + private var firstParticlePoint: LorenzVec? = null + private var particlePoint: LorenzVec? = null + private var guessPoint: LorenzVec? = null - var lastSoundPoint: LorenzVec? = null - var locs = mutableListOf() + private var lastSoundPoint: LorenzVec? = null + private var locs = mutableListOf() - var dingSlope = mutableListOf() + private var dingSlope = mutableListOf() var distance: Double? = null - var distance2: Double? = null + private var distance2: Double? = null @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { @@ -280,4 +280,4 @@ class SoopyGuessBurrow { } private fun isEnabled() = DianaAPI.featuresEnabled() && SkyHanniMod.feature.event.diana.burrowsSoopyGuess -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt index d2d866f36..2f51e11f3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt @@ -128,7 +128,7 @@ object FarmingContestAPI { fun getContestAtTime(time: Long) = contests[time] - fun getContestsOfType(crop: CropType) = contests.values.filter { it.crop == crop } + private fun getContestsOfType(crop: CropType) = contests.values.filter { it.crop == crop } fun calculateAverages(crop: CropType): Pair> { var amount = 0 diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt index ec3284ef0..3f03cbe4b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobContestFFNeededDisplay.kt @@ -81,10 +81,6 @@ class JacobContestFFNeededDisplay { add(listOf("§cThis is too low, showing 19.9 Blocks/second instead!")) blocksPerSecond = 19.9 } - if (blocksPerSecond < 1) { - addAsSingletonList("§cLow blocks per second!") - addAsSingletonList("§cFarm this crop for couple more seconds!") - } } addAsSingletonList("") diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt index e7af728cc..dfc83e404 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/JacobFarmingContestsInventory.kt @@ -52,10 +52,7 @@ class JacobFarmingContestsInventory { val name = item.name!! - if (foundEvents.contains(name)) { - } else { - foundEvents.add(name) - } + foundEvents.add(name) val time = FarmingContestAPI.getSbTimeFor(name) ?: continue FarmingContestAPI.addContest(time, item) if (config.realTime) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index 13125c349..fb9bdfaac 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -519,7 +519,7 @@ class FarmingWeightDisplay { openWebsite(name, ignoreCooldown = true) } - var lastName = "" + private var lastName = "" private fun openWebsite(name: String, ignoreCooldown: Boolean = false) { if (!ignoreCooldown && lastOpenWebsite.passedSince() < 5.seconds && name == lastName) return diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WildStrawberryDyeNotification.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WildStrawberryDyeNotification.kt index 29fe278ae..d923efb6d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WildStrawberryDyeNotification.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/WildStrawberryDyeNotification.kt @@ -15,7 +15,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds class WildStrawberryDyeNotification { - var lastCloseTime = 0L + private var lastCloseTime = 0L val item by lazy { "DYE_WILD_STRAWBERRY".asInternalName() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt index 9c56927fb..2fe7e2f3a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt @@ -86,7 +86,6 @@ class GardenVisitorFeatures { val pair = ItemUtils.readItemAmount(line) if (pair == null) { - LorenzUtils.error("Could not read item '$line'") continue } val (itemName, amount) = pair @@ -97,7 +96,7 @@ class GardenVisitorFeatures { readToolTip(visitor, offerItem) if (visitor.status == VisitorAPI.VisitorStatus.NEW) { - val alreadyReady = offerItem.getLore().any { it == "§eClick to give!" } == true + val alreadyReady = offerItem.getLore().any { it == "§eClick to give!" } if (alreadyReady) { VisitorAPI.changeStatus(visitor, VisitorAPI.VisitorStatus.READY, "inSacks") visitor.inSacks = true @@ -270,7 +269,6 @@ class GardenVisitorFeatures { if (visitor.lastLore.isEmpty()) { readToolTip(visitor, event.itemStack) - LorenzUtils.error("Reloaded the visitor data of that inventory, this should not happen.") } toolTip.addAll(visitor.lastLore) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt index 026d263ee..a4d370e62 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt @@ -27,7 +27,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class HighlightVisitorsOutsideOfGarden { private var visitorJson = mapOf>() - val config get() = SkyHanniMod.feature.garden.visitors + private val config get() = SkyHanniMod.feature.garden.visitors @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt index 1ad82a241..f71ab6883 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt @@ -153,7 +153,7 @@ object VisitorAPI { found = false continue } - val name = VisitorAPI.fromHypixelName(line) + val name = fromHypixelName(line) // Hide hypixel watchdog entries if (name.contains("§c") && !name.contains("Spaceman") && !name.contains("Grandma Wolf")) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt index f210f857c..0f8c3fe4a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt @@ -17,7 +17,7 @@ import kotlin.time.Duration.Companion.milliseconds // Delaying key presses by 300ms comes from NotEnoughUpdates object HarpFeatures { - val config get() = SkyHanniMod.feature.inventory.helper.harp + private val config get() = SkyHanniMod.feature.inventory.helper.harp private var lastClick = SimpleTimeMark.farPast() private object KeyIterable : Iterable { diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/FireVeilWandParticles.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/FireVeilWandParticles.kt index 455efcef0..abb0c0f4c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/FireVeilWandParticles.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/FireVeilWandParticles.kt @@ -18,7 +18,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class FireVeilWandParticles { private val config get() = SkyHanniMod.feature.itemAbilities.fireVeilWands - var lastClick = 0L + private var lastClick = 0L val item by lazy { "FIRE_VEIL_WAND".asInternalName() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/crystalhollows/CrystalHollowsNamesInCore.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/crystalhollows/CrystalHollowsNamesInCore.kt index af4d3abf9..b1682baad 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/crystalhollows/CrystalHollowsNamesInCore.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/crystalhollows/CrystalHollowsNamesInCore.kt @@ -12,7 +12,7 @@ import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class CrystalHollowsNamesInCore { - val config get() = SkyHanniMod.feature.mining + private val config get() = SkyHanniMod.feature.mining private val coreLocations = mapOf( LorenzVec(550, 116, 550) to "§8Precursor City", LorenzVec(552, 116, 474) to "§bMithril Deposits", @@ -20,7 +20,7 @@ class CrystalHollowsNamesInCore { LorenzVec(474, 116, 554) to "§6Goblin Hideout" ) - var showWaypoints = false + private var showWaypoints = false @SubscribeEvent fun onTick(event: LorenzTickEvent) { @@ -44,4 +44,4 @@ class CrystalHollowsNamesInCore { } fun isEnabled() = IslandType.CRYSTAL_HOLLOWS.isInIsland() && config.crystalHollowsNamesInCore -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/BrewingStandOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/BrewingStandOverlay.kt index d7bee2948..cbcb52db7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/BrewingStandOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/BrewingStandOverlay.kt @@ -36,8 +36,8 @@ class BrewingStandOverlay { if (name.contains(" or ")) return event.stackTip = name - event.offsetX = event.offsetX + 3 + event.offsetX += 3 event.offsetY = -5 event.alignLeft = false } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt index e6ce5d8f9..9b6987fad 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt @@ -52,7 +52,7 @@ object QuickModMenuSwitch { } } - class Mod(val name: String, val description: List, val command: String, val guiPath: List) { + class Mod(val name: String, val description: List, val command: String, private val guiPath: List) { fun isInGui() = guiPath.any { latestGuiPath.startsWith(it) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/SkyBlockKickDuration.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/SkyBlockKickDuration.kt index d536b8f53..7ca34eafb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/SkyBlockKickDuration.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/SkyBlockKickDuration.kt @@ -16,10 +16,10 @@ import kotlin.time.Duration.Companion.seconds class SkyBlockKickDuration { private val config get() = SkyHanniMod.feature.misc.kickDuration - var kickMessage = false - var showTime = false - var lastKickTime = SimpleTimeMark.farPast() - var hasWarned = false + private var kickMessage = false + private var showTime = false + private var lastKickTime = SimpleTimeMark.farPast() + private var hasWarned = false @SubscribeEvent fun onChat(event: LorenzChatEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt index 86f917d35..59d44b1b7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/trevor/TrevorTracker.kt @@ -95,7 +95,7 @@ object TrevorTracker { val storage = ProfileStorageData.profileSpecific?.trapperData ?: return storage.questsDone += 1 val rarity = matcher.group("rarity") - val foundRarity = TrapperMobRarity.values().firstOrNull { it.formattedName == rarity } ?: return + val foundRarity = TrapperMobRarity.entries.firstOrNull { it.formattedName == rarity } ?: return val old = storage.animalRarities[foundRarity] ?: 0 storage.animalRarities = storage.animalRarities.editCopy { this[foundRarity] = old + 1 } saveAndUpdate() diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt index b3539c131..b4e517734 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt @@ -59,7 +59,7 @@ class GuiOptionEditorUpdateCheck(option: ProcessedOption) : GuiOptionEditor(opti GlStateManager.popMatrix() } - fun getButtonPosition(width: Int) = width - button.width + private fun getButtonPosition(width: Int) = width - button.width override fun getHeight(): Int { return 55 } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt index ab32d9aa7..c6e50e4ee 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt @@ -62,11 +62,11 @@ object UpdateManager { } } - fun isBetaRelease(): Boolean { + private fun isBetaRelease(): Boolean { return getCurrentVersion().contains("beta", ignoreCase = true) } - val config get() = SkyHanniMod.feature.about + private val config get() = SkyHanniMod.feature.about fun reset() { updateState = UpdateState.NONE @@ -119,7 +119,7 @@ object UpdateManager { }, MinecraftExecutor.OnThread) } - val context = UpdateContext( + private val context = UpdateContext( UpdateSource.githubUpdateSource("hannibal002", "SkyHanni"), UpdateTarget.deleteAndSaveInTheSameFolder(UpdateManager::class.java), CurrentVersion.ofTag(SkyHanniMod.version), @@ -137,5 +137,5 @@ object UpdateManager { NONE } - var potentialUpdate: PotentialUpdate? = null + private var potentialUpdate: PotentialUpdate? = null } diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt index 79a1a5361..52f5c23f4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt @@ -13,7 +13,7 @@ import at.hannibal2.skyhanni.utils.LocationUtils import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NEUItems.getItemStack import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.jsonobjects.CrimsonIsleReputationJson.ReputationQuest @@ -80,7 +80,7 @@ class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHel } else { val lineList = mutableListOf() lineList.add(" ") - lineList.add(NEUItems.getItemStack(displayItem)) + lineList.add(getItemStack(displayItem)) lineList.add("§5$displayName§7: $result") display.add(lineList) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt index b39c6d004..e17bd32ed 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt @@ -49,9 +49,9 @@ class RiftWiltedBerberisHelper { } } - fun nearestBerberis(location: LorenzVec): WiltedBerberis? { + private fun nearestBerberis(location: LorenzVec): WiltedBerberis? { return list.filter { it.currentParticles.distanceSq(location) < 8 } - .sortedBy { it.currentParticles.distanceSq(location) }.firstOrNull() + .minByOrNull { it.currentParticles.distanceSq(location) } } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftLarva.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftLarva.kt index 7c994ea1b..5629972ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftLarva.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftLarva.kt @@ -15,7 +15,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class RiftLarva { private val config get() = RiftAPI.config.area.wyldWoods.larvas private var hasHookInHand = false - val larvaSkullTexture = + private val larvaSkullTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTgzYjMwZTlkMTM1YjA1MTkwZWVhMmMzYWM2MWUyYWI1NWEyZDgxZTFhNThkYmIyNjk4M2ExNDA4MjY2NCJ9fX0=" @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftOdonata.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftOdonata.kt index 1093a8a69..7d1e9b9ba 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftOdonata.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/wyldwoods/RiftOdonata.kt @@ -16,7 +16,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class RiftOdonata { private val config get() = RiftAPI.config.area.wyldWoods.odonata private var hasBottleInHand = false - val odonataSkullTexture = + private val odonataSkullTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWZkODA2ZGVmZGZkZjU5YjFmMjYwOWM4ZWUzNjQ2NjZkZTY2MTI3YTYyMzQxNWI1NDMwYzkzNThjNjAxZWY3YyJ9fX0=" private val emptyBottle by lazy { "EMPTY_ODONATA_BOTTLE".asInternalName() } diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt index f639fbe04..d8a4e8344 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt @@ -44,7 +44,7 @@ object FontRendererHook { * [FontRenderer#drawString()][net.minecraft.client.gui.FontRenderer.drawString] rather than a custom font renderer * */ - fun setupChromaFont() { + private fun setupChromaFont() { DRAW_CHROMA.startChroma() DRAW_CHROMA_SHADOW.startChroma() } @@ -52,7 +52,7 @@ object FontRendererHook { /** * See [setupChromaFont] */ - fun endChromaFont() { + private fun endChromaFont() { DRAW_CHROMA.endChroma() DRAW_CHROMA_SHADOW.endChroma() } diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt index cee60e7ae..6f1bc9f64 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt @@ -244,8 +244,7 @@ object SkyHanniConfigSearchResetCommand { if (this is Runnable) return "Runnable" // we don't use javaClass.simpleName since we want to catch edge cases - val name = javaClass.name - return when (name) { + return when (val name = javaClass.name) { "at.hannibal2.skyhanni.config.core.config.Position" -> "Position" "java.lang.Boolean" -> "Boolean" "java.lang.Integer" -> "Int" diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index e6cb3e841..b86ac7200 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -62,7 +62,7 @@ class SkyHanniDebugsAndTests { val debugLogger = LorenzLogger("debug/test") - fun runn(compound: NBTTagCompound, text: String) { + private fun runn(compound: NBTTagCompound, text: String) { print("$text'$compound'") for (s in compound.keySet) { val element = compound.getCompoundTag(s) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt index 5a14cadf7..b37f9b885 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt @@ -40,7 +40,7 @@ object BlockUtils { return false } - fun rayTrace(start: LorenzVec, direction: LorenzVec, distance: Double = 50.0): LorenzVec? { + private fun rayTrace(start: LorenzVec, direction: LorenzVec, distance: Double = 50.0): LorenzVec? { val help = direction.normalize().multiply(distance) val target = start.add(help) val result = Minecraft.getMinecraft().theWorld.rayTraceBlocks(start.toVec3(), target.toVec3()) @@ -53,4 +53,4 @@ object BlockUtils { Minecraft.getMinecraft().thePlayer.lookVec.toLorenzVec(), duration ) -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt index 4ac55af01..611edc75b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt @@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.RenderEntityOutlineEvent import at.hannibal2.skyhanni.mixins.transformers.CustomRenderGlobal -import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.test.command.ErrorManager.logErrorWithData import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.OpenGlHelper @@ -339,7 +339,7 @@ object EntityOutlineRenderer { } } - fun isCacheEmpty() = isXrayCacheEmpty() && isNoXrayCacheEmpty() + private fun isCacheEmpty() = isXrayCacheEmpty() && isNoXrayCacheEmpty() private fun isXrayCacheEmpty() = entityRenderCache.xrayCache?.isEmpty() ?: true private fun isNoXrayCacheEmpty() = entityRenderCache.noXrayCache?.isEmpty() ?: true @@ -366,7 +366,7 @@ object EntityOutlineRenderer { val renderGlobal = try { mc.renderGlobal as CustomRenderGlobal } catch (e: NoClassDefFoundError) { - ErrorManager.logError(e, "Unable to enable entity outlines, the required mixin is not loaded") + logErrorWithData(e, "Unable to enable entity outlines, the required mixin is not loaded") isMissingMixin = true return } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt index 5e4a63452..7dfae5bac 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt @@ -16,7 +16,7 @@ import kotlin.math.roundToInt */ object GuiRenderUtils { - fun drawStringCentered(str: String?, fr: FontRenderer, x: Float, y: Float, shadow: Boolean, colour: Int) { + private fun drawStringCentered(str: String?, fr: FontRenderer, x: Float, y: Float, shadow: Boolean, colour: Int) { val strLen = fr.getStringWidth(str) val x2 = x - strLen / 2f val y2 = y - fr.FONT_HEIGHT / 2f diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index a1b7ed09f..b419b46f4 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -158,7 +158,7 @@ object ItemUtils { } // Taken from NEU - fun createSkull(displayName: String, uuid: String, value: String, lore: Array?): ItemStack { + private fun createSkull(displayName: String, uuid: String, value: String, lore: Array?): ItemStack { val render = ItemStack(Items.skull, 1, 3) val tag = NBTTagCompound() val skullOwner = NBTTagCompound() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt index 5078a492f..9b7e1afdb 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt @@ -16,7 +16,7 @@ object KeyboardManager { private var lastClickedMouseButton = -1 // A mac-only key, represents Windows key on windows (but different key code) - fun isCommandKeyDown() = Keyboard.KEY_LMETA.isKeyHeld() || Keyboard.KEY_RMETA.isKeyHeld() + private fun isCommandKeyDown() = Keyboard.KEY_LMETA.isKeyHeld() || Keyboard.KEY_RMETA.isKeyHeld() fun isControlKeyDown() = Keyboard.KEY_LCONTROL.isKeyHeld() || Keyboard.KEY_RCONTROL.isKeyHeld() fun isShiftKeyDown() = Keyboard.KEY_LSHIFT.isKeyHeld() || Keyboard.KEY_RSHIFT.isKeyHeld() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt index fafb41c96..2079408f7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt @@ -6,7 +6,7 @@ import net.minecraft.util.AxisAlignedBB object LocationUtils { - fun canSee(a: LorenzVec, b: LorenzVec): Boolean { + private fun canSee(a: LorenzVec, b: LorenzVec): Boolean { return Minecraft.getMinecraft().theWorld.rayTraceBlocks(a.toVec3(), b.toVec3(), false, true, false) == null } @@ -28,7 +28,7 @@ object LocationUtils { return vec.add(0.0, 0.0 + player.getEyeHeight(), 0.0) } - fun AxisAlignedBB.isVecInside(vec: LorenzVec) = isVecInside(vec.toVec3()) + private fun AxisAlignedBB.isVecInside(vec: LorenzVec) = isVecInside(vec.toVec3()) fun AxisAlignedBB.isPlayerInside() = isVecInside(playerLocation()) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 90970a315..88678fdd0 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -367,7 +367,7 @@ object LorenzUtils { } // MoulConfig is in Java, I don't want to downgrade this logic - fun onChange(vararg properties: Property, observer: Observer) { + private fun onChange(vararg properties: Property, observer: Observer) { for (property in properties) { property.whenChanged { a, b -> observer.observeChange(a, b) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt index d03455ac9..41e5f4923 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt @@ -204,6 +204,6 @@ object NumberUtil { } val Int.milion get() = this * 1_000_000.0 - val Int.bilion get() = this * 1_000_000_000.0 + private val Int.bilion get() = this * 1_000_000_000.0 val Double.milion get() = (this * 1_000_000.0).toLong() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 7e10b0351..869aeeb25 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -244,7 +244,7 @@ object RenderUtils { /** * @author Mojang */ - fun drawNametag(str: String, color: Color?) { + private fun drawNametag(str: String, color: Color?) { val fontRenderer = Minecraft.getMinecraft().fontRendererObj val f1 = 0.02666667f GlStateManager.pushMatrix() @@ -352,7 +352,7 @@ object RenderUtils { return lastValue + (currentValue - lastValue) * multiplier } - fun Position.transform(): Pair { + private fun Position.transform(): Pair { GlStateManager.translate(getAbsX().toFloat(), getAbsY().toFloat(), 0F) GlStateManager.scale(effectiveScale, effectiveScale, 1F) val x = ((Utils.getMouseX() - getAbsX()) / effectiveScale).toInt() @@ -374,14 +374,11 @@ object RenderUtils { val minecraft = Minecraft.getMinecraft() val renderer = minecraft.renderManager.fontRenderer - val x = offsetX - val y = offsetY - - GlStateManager.translate(x + 1.0, y + 1.0, 0.0) + GlStateManager.translate(offsetX + 1.0, offsetY + 1.0, 0.0) if (centered) { val strLen: Int = renderer.getStringWidth(string) - val x2 = x - strLen / 2f + val x2 = offsetX - strLen / 2f GL11.glTranslatef(x2, 0f, 0f) renderer.drawStringWithShadow(display, 0f, 0f, 0) GL11.glTranslatef(-x2, 0f, 0f) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt index 9f65a71f1..b0533a142 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt @@ -254,7 +254,7 @@ object SkyBlockItemModifierUtils { fun ItemStack.getExtraAttributes() = tagCompound?.getCompoundTag("ExtraAttributes") - class GemstoneSlot(val type: GemstoneType, val quality: GemstoneQuality) { + class GemstoneSlot(val type: GemstoneType, private val quality: GemstoneQuality) { fun getInternalName() = "${quality}_${type}_GEM".asInternalName() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index dd114d8fd..12b2e4c64 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -61,7 +61,7 @@ object StringUtils { return map.subMap(prefix, true, lastKey, false) } - fun nextLexicographicallyStringWithSameLength(input: String): String { + private fun nextLexicographicallyStringWithSameLength(input: String): String { val lastCharPosition = input.length - 1 val inputWithoutLastChar = input.substring(0, lastCharPosition) val lastChar = input[lastCharPosition] diff --git a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt index 2a6d1f5ab..a03270c57 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt @@ -24,7 +24,7 @@ class Timer( val ended get() = !remaining.isPositive() val remaining get() = duration - elapsed - val elapsed get() = paused?.let { it - started } ?: started.passedSince() + private val elapsed get() = paused?.let { it - started } ?: started.passedSince() fun pause() { paused = SimpleTimeMark.now() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index 552e1a069..aa63f3382 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -90,7 +90,7 @@ interface Renderable { return clickable(hoverTips(text, tips, bypassChecks = bypassChecks), onClick, bypassChecks = bypassChecks) } - fun clickable( + private fun clickable( render: Renderable, onClick: () -> Unit, button: Int = 0, @@ -195,7 +195,7 @@ interface Renderable { return result } - fun underlined(renderable: Renderable) = object : Renderable { + private fun underlined(renderable: Renderable) = object : Renderable { override val width: Int get() = renderable.width override val height = 10 @@ -207,7 +207,7 @@ interface Renderable { } } - fun hoverable( + private fun hoverable( hovered: Renderable, unhovered: Renderable, bypassChecks: Boolean = false, @@ -254,7 +254,7 @@ interface Renderable { } } - fun placeholder(width: Int) = object : Renderable { + private fun placeholder(width: Int) = object : Renderable { override val width: Int = width override val height = 10 diff --git a/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt index cd34234b5..276e53159 100644 --- a/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt +++ b/src/test/java/at/hannibal2/skyhanni/test/ItemUtilsTest.kt @@ -5,7 +5,7 @@ import org.junit.jupiter.api.Test class ItemUtilsTest { - val items: MutableMap> = mutableMapOf( + private val items: MutableMap> = mutableMapOf( "§5Hoe of Greatest Tilling" to Pair("§5Hoe of Greatest Tilling", 1), "§fSilver medal §8x2" to Pair("§fSilver medal", 2), "§aJacob's Ticket §8x32" to Pair("§aJacob's Ticket", 32), diff --git a/src/test/java/at/hannibal2/skyhanni/test/garden/VisitorToolTipParserTest.kt b/src/test/java/at/hannibal2/skyhanni/test/garden/VisitorToolTipParserTest.kt index 11b404e4c..cdb171aa6 100644 --- a/src/test/java/at/hannibal2/skyhanni/test/garden/VisitorToolTipParserTest.kt +++ b/src/test/java/at/hannibal2/skyhanni/test/garden/VisitorToolTipParserTest.kt @@ -28,7 +28,7 @@ class VisitorToolTipParserTest { assert(parsedData.itemsNeeded.isNotEmpty()) { "Visitor items needed is ${parsedData.itemsNeeded.count()} instead of 1" } - assert(parsedData.itemsNeeded.get("§aEnchanted Hay Bale") == 28) { + assert(parsedData.itemsNeeded["§aEnchanted Hay Bale"] == 28) { "Visitor items needed does not contain '§aEnchanted Hay Bale'" } } @@ -52,7 +52,7 @@ class VisitorToolTipParserTest { ) for ((itemName, amount) in assertions) { - assert(parsedData.rewards.get(itemName) == amount) { + assert(parsedData.rewards[itemName] == amount) { "Visitor rewards does not contain '$itemName' with amount '$amount'" } } @@ -63,7 +63,7 @@ class VisitorToolTipParserTest { val parsedData = VisitorTooltipParser.parse(lore, GardenConfig() ) - val copper = parsedData.rewards.get("Copper") + val copper = parsedData.rewards["Copper"] assert(copper == 23) { "Visitor rewards does not contain 'Copper' with amount '23'" } -- cgit From a6de55740355b3bc4d7c869626d22da5b3854416 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:11:48 +0100 Subject: reverted some private functions and other misc cleanup changes --- src/main/java/at/hannibal2/skyhanni/data/IslandType.kt | 2 +- .../skyhanni/features/garden/contest/FarmingContestAPI.kt | 2 +- .../skyhanni/features/garden/visitor/GardenVisitorFeatures.kt | 11 ++++++++++- .../hannibal2/skyhanni/features/misc/update/UpdateManager.kt | 4 ++-- .../java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt | 4 ++-- src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt | 2 +- .../java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt | 4 ++-- src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt | 7 +++---- src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt | 4 ++-- .../at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt | 2 +- src/main/java/at/hannibal2/skyhanni/utils/Timer.kt | 2 +- .../at/hannibal2/skyhanni/utils/renderables/Renderable.kt | 10 +++++----- 17 files changed, 36 insertions(+), 28 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt index 17755da88..3ab213025 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/IslandType.kt @@ -31,6 +31,6 @@ enum class IslandType(val displayName: String, val apiName: String = "null") { fun getByNameOrUnknown(name: String) = getByNameOrNull(name) ?: UNKNOWN fun getByName(name: String) = getByNameOrNull(name) ?: error("IslandType not found: '$name'") - private fun getByNameOrNull(name: String) = entries.firstOrNull { it.displayName == name } + fun getByNameOrNull(name: String) = entries.firstOrNull { it.displayName == name } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt index 2f51e11f3..d2d866f36 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestAPI.kt @@ -128,7 +128,7 @@ object FarmingContestAPI { fun getContestAtTime(time: Long) = contests[time] - private fun getContestsOfType(crop: CropType) = contests.values.filter { it.crop == crop } + fun getContestsOfType(crop: CropType) = contests.values.filter { it.crop == crop } fun calculateAverages(crop: CropType): Pair> { var amount = 0 diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt index 2fe7e2f3a..4995decc8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt @@ -19,6 +19,7 @@ import at.hannibal2.skyhanni.features.garden.CropType.Companion.getByNameOrNull import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.features.garden.farming.GardenCropSpeed.getSpeed import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemBlink @@ -80,12 +81,20 @@ class GardenVisitorFeatures { val visitor = event.visitor val offerItem = visitor.offer!!.offerItem - for (line in offerItem.getLore()) { + val lore = offerItem.getLore() + for (line in lore) { if (line == "§7Items Required:") continue if (line.isEmpty()) break val pair = ItemUtils.readItemAmount(line) if (pair == null) { + ErrorManager.logErrorStateWithData( + "Could not read items required in Visitor Inventory", "ItemUtils.readItemAmount returns null", + "line" to line, + "offerItem" to offerItem, + "lore" to lore, + "visitor" to visitor + ) continue } val (itemName, amount) = pair diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt index c6e50e4ee..2a35519e9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/update/UpdateManager.kt @@ -62,7 +62,7 @@ object UpdateManager { } } - private fun isBetaRelease(): Boolean { + fun isCurrentlyBeta(): Boolean { return getCurrentVersion().contains("beta", ignoreCase = true) } @@ -82,7 +82,7 @@ object UpdateManager { } logger.log("Starting update check") var updateStream = config.updateStream.get() - if (updateStream == About.UpdateStream.RELEASES && isBetaRelease()) { + if (updateStream == About.UpdateStream.RELEASES && isCurrentlyBeta()) { updateStream = About.UpdateStream.BETA } activePromise = context.checkUpdate(updateStream.stream) diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index b86ac7200..635ea3351 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -62,11 +62,11 @@ class SkyHanniDebugsAndTests { val debugLogger = LorenzLogger("debug/test") - private fun runn(compound: NBTTagCompound, text: String) { + private fun run(compound: NBTTagCompound, text: String) { print("$text'$compound'") for (s in compound.keySet) { val element = compound.getCompoundTag(s) - runn(element, "$text ") + run(element, "$text ") } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt index b37f9b885..9bc353820 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt @@ -40,7 +40,7 @@ object BlockUtils { return false } - private fun rayTrace(start: LorenzVec, direction: LorenzVec, distance: Double = 50.0): LorenzVec? { + fun rayTrace(start: LorenzVec, direction: LorenzVec, distance: Double = 50.0): LorenzVec? { val help = direction.normalize().multiply(distance) val target = start.add(help) val result = Minecraft.getMinecraft().theWorld.rayTraceBlocks(start.toVec3(), target.toVec3()) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt index 611edc75b..28fc08807 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityOutlineRenderer.kt @@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.RenderEntityOutlineEvent import at.hannibal2.skyhanni.mixins.transformers.CustomRenderGlobal -import at.hannibal2.skyhanni.test.command.ErrorManager.logErrorWithData +import at.hannibal2.skyhanni.test.command.ErrorManager import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.OpenGlHelper @@ -366,7 +366,7 @@ object EntityOutlineRenderer { val renderGlobal = try { mc.renderGlobal as CustomRenderGlobal } catch (e: NoClassDefFoundError) { - logErrorWithData(e, "Unable to enable entity outlines, the required mixin is not loaded") + ErrorManager.logErrorWithData(e, "Unable to enable entity outlines, the required mixin is not loaded") isMissingMixin = true return } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt index 7dfae5bac..5e4a63452 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/GuiRenderUtils.kt @@ -16,7 +16,7 @@ import kotlin.math.roundToInt */ object GuiRenderUtils { - private fun drawStringCentered(str: String?, fr: FontRenderer, x: Float, y: Float, shadow: Boolean, colour: Int) { + fun drawStringCentered(str: String?, fr: FontRenderer, x: Float, y: Float, shadow: Boolean, colour: Int) { val strLen = fr.getStringWidth(str) val x2 = x - strLen / 2f val y2 = y - fr.FONT_HEIGHT / 2f diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index b419b46f4..a1b7ed09f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -158,7 +158,7 @@ object ItemUtils { } // Taken from NEU - private fun createSkull(displayName: String, uuid: String, value: String, lore: Array?): ItemStack { + fun createSkull(displayName: String, uuid: String, value: String, lore: Array?): ItemStack { val render = ItemStack(Items.skull, 1, 3) val tag = NBTTagCompound() val skullOwner = NBTTagCompound() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt index 9b7e1afdb..5078a492f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt @@ -16,7 +16,7 @@ object KeyboardManager { private var lastClickedMouseButton = -1 // A mac-only key, represents Windows key on windows (but different key code) - private fun isCommandKeyDown() = Keyboard.KEY_LMETA.isKeyHeld() || Keyboard.KEY_RMETA.isKeyHeld() + fun isCommandKeyDown() = Keyboard.KEY_LMETA.isKeyHeld() || Keyboard.KEY_RMETA.isKeyHeld() fun isControlKeyDown() = Keyboard.KEY_LCONTROL.isKeyHeld() || Keyboard.KEY_RCONTROL.isKeyHeld() fun isShiftKeyDown() = Keyboard.KEY_LSHIFT.isKeyHeld() || Keyboard.KEY_RSHIFT.isKeyHeld() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt index 2079408f7..e6929d737 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LocationUtils.kt @@ -6,9 +6,8 @@ import net.minecraft.util.AxisAlignedBB object LocationUtils { - private fun canSee(a: LorenzVec, b: LorenzVec): Boolean { - return Minecraft.getMinecraft().theWorld.rayTraceBlocks(a.toVec3(), b.toVec3(), false, true, false) == null - } + fun canSee(a: LorenzVec, b: LorenzVec) = + Minecraft.getMinecraft().theWorld.rayTraceBlocks(a.toVec3(), b.toVec3(), false, true, false) == null fun playerLocation() = Minecraft.getMinecraft().thePlayer.getLorenzVec() @@ -28,7 +27,7 @@ object LocationUtils { return vec.add(0.0, 0.0 + player.getEyeHeight(), 0.0) } - private fun AxisAlignedBB.isVecInside(vec: LorenzVec) = isVecInside(vec.toVec3()) + fun AxisAlignedBB.isVecInside(vec: LorenzVec) = isVecInside(vec.toVec3()) fun AxisAlignedBB.isPlayerInside() = isVecInside(playerLocation()) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 88678fdd0..90970a315 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -367,7 +367,7 @@ object LorenzUtils { } // MoulConfig is in Java, I don't want to downgrade this logic - private fun onChange(vararg properties: Property, observer: Observer) { + fun onChange(vararg properties: Property, observer: Observer) { for (property in properties) { property.whenChanged { a, b -> observer.observeChange(a, b) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 869aeeb25..03f552e7a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -244,7 +244,7 @@ object RenderUtils { /** * @author Mojang */ - private fun drawNametag(str: String, color: Color?) { + fun drawNametag(str: String, color: Color?) { val fontRenderer = Minecraft.getMinecraft().fontRendererObj val f1 = 0.02666667f GlStateManager.pushMatrix() @@ -352,7 +352,7 @@ object RenderUtils { return lastValue + (currentValue - lastValue) * multiplier } - private fun Position.transform(): Pair { + fun Position.transform(): Pair { GlStateManager.translate(getAbsX().toFloat(), getAbsY().toFloat(), 0F) GlStateManager.scale(effectiveScale, effectiveScale, 1F) val x = ((Utils.getMouseX() - getAbsX()) / effectiveScale).toInt() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt index b0533a142..9f65a71f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt @@ -254,7 +254,7 @@ object SkyBlockItemModifierUtils { fun ItemStack.getExtraAttributes() = tagCompound?.getCompoundTag("ExtraAttributes") - class GemstoneSlot(val type: GemstoneType, private val quality: GemstoneQuality) { + class GemstoneSlot(val type: GemstoneType, val quality: GemstoneQuality) { fun getInternalName() = "${quality}_${type}_GEM".asInternalName() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 12b2e4c64..dd114d8fd 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -61,7 +61,7 @@ object StringUtils { return map.subMap(prefix, true, lastKey, false) } - private fun nextLexicographicallyStringWithSameLength(input: String): String { + fun nextLexicographicallyStringWithSameLength(input: String): String { val lastCharPosition = input.length - 1 val inputWithoutLastChar = input.substring(0, lastCharPosition) val lastChar = input[lastCharPosition] diff --git a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt index a03270c57..2a6d1f5ab 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt @@ -24,7 +24,7 @@ class Timer( val ended get() = !remaining.isPositive() val remaining get() = duration - elapsed - private val elapsed get() = paused?.let { it - started } ?: started.passedSince() + val elapsed get() = paused?.let { it - started } ?: started.passedSince() fun pause() { paused = SimpleTimeMark.now() diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index aa63f3382..9367e5ee1 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -35,7 +35,7 @@ interface Renderable { val list = mutableMapOf, List>() var currentRenderPassMousePosition: Pair? = null - private set + set fun withMousePosition(posX: Int, posY: Int, block: () -> T): T { val last = currentRenderPassMousePosition @@ -90,7 +90,7 @@ interface Renderable { return clickable(hoverTips(text, tips, bypassChecks = bypassChecks), onClick, bypassChecks = bypassChecks) } - private fun clickable( + fun clickable( render: Renderable, onClick: () -> Unit, button: Int = 0, @@ -195,7 +195,7 @@ interface Renderable { return result } - private fun underlined(renderable: Renderable) = object : Renderable { + fun underlined(renderable: Renderable) = object : Renderable { override val width: Int get() = renderable.width override val height = 10 @@ -207,7 +207,7 @@ interface Renderable { } } - private fun hoverable( + fun hoverable( hovered: Renderable, unhovered: Renderable, bypassChecks: Boolean = false, @@ -254,7 +254,7 @@ interface Renderable { } } - private fun placeholder(width: Int) = object : Renderable { + fun placeholder(width: Int) = object : Renderable { override val width: Int = width override val height = 10 -- cgit